2012-02-24 83 views
0

我正在研究一個程序,您可以選擇最多3個要分配其中的東西。爲什麼小數點不正確?

舉例說,一個動作使你獲得4分,而這4分在你選擇的3件事中分配。

在這種情況下,這3件事每個得到1.33333 ...點。

在我的數據庫中,它們存儲爲1.33。

但是,當我把它們帶出來的時候,它會達到3.99。

可以理解。

但是,如何避免這一點,而不給予1.34點的東西之一?

+0

取整?你沒有清楚地解釋你想怎麼做,這取決於你。這不是一個編碼問題。 – 2012-02-24 05:40:37

+0

爲什麼你不能總計? – 2012-02-24 05:41:03

+0

您也可以將總數緩存在數據庫中,因此,不要將累加值累加起來,只需查看記錄 – 2012-02-24 05:41:07

回答

5

將完整的float/double存儲在數據庫中,而不是截斷爲2位小數。 trunc的時間是向用戶顯示值時 - ,但只截斷顯示的字符串,而不是實際值

浮點值是計算的煩人的叔叔。讓他們成爲他們自己,然後在向公衆展示時將其清理乾淨。

+3

「浮點值是計算的煩人的叔叔,只要讓它們成爲他們自己的東西,然後清理它們即可當向公衆介紹時「。 - 這是一個奇妙的報價,我一定會偷竊 – 2012-02-24 05:50:01

+0

特朗克或*輪*,我應該說,在適當的情況下。 – QED 2012-02-24 17:17:47

0

使用第三位小數 - 不用於顯示,但僅用於跟蹤精度。如果有人將3分中的4分,則將其存儲爲1.333。當你計算回來時,你會得到3.999,你四捨五入到4.另一方面,如果有人將3.99分爲三個對象,將其存儲爲1.33,所以當你計算回來時,得到3.99(而不是3.999),因此你不知道收集。

2

浮點數在這種情況下將是有損的。如果你在處理整數分子和分母,爲什麼不把它們存儲爲分數?你可以使用Pear's Math Fraction library或自己寫點東西。