2009-07-29 71 views
5

問題是這樣的,當我從表中向視圖添加兩個或更多雙精度數據,而不是給我正確的結果時,它會添加大約十個左右的數字。例如0.5 + 1.5 = 1.99999999998或5.5 + 8.5 = 14.0000000001。有任何想法嗎? (我知道這是一個n00b的問題,我記得在9年級的考試中不得不處理類似的東西,但我不記得當時我是如何做到的):Mysql的計算問題:1 + 1 = 1.999999999

+0

你到底在問什麼?你想知道爲什麼會發生這種行爲嗎?或者你只是想提供正確的結果? – Velociraptors 2009-07-29 20:05:13

+7

這是標準的浮點問題。請爲[浮點數]搜索超過100個類似的問題。其中一個可能會幫助你。 – 2009-07-29 20:05:48

+2

我的高中數學老師告訴我們.9999 ... = 1,所以我不明白你的問題是什麼? :) – Jason 2009-07-29 20:06:50

回答

2

不要指望整數當你使用浮點類型時。

3

This article解釋這個問題非常好。

簡而言之,非常大或非常小的浮點數會導致計算過程中精度的降低。

2

不知道,如果你正在尋找一個解釋或解決方案,但因爲你已經得到了指針好解釋....

如果你需要你的號碼錶現得像整數,利用整數。如果您需要精確度有限(即小數點後兩位,表示貨幣的字段),則無論如何都要將其存儲爲整數,但將其乘以10的任何因子,以便在放入小數點後襬脫小數數據庫並且在您將其拉回時分開。

因此,如果您要代表的是一個成本爲3.99美元的小部件,則應將399放入WIDGET.cost字段。

說不上來,如果適用於您的情況或沒有。但一般的經驗法則是浮點數總是僅僅是近似值。 :-)如果精度很重要,找出使用整數的方法。

8

添加1和1爲浮點或雙精度不應導致任何東西,但2

我覺得很難相信,0.5 + 1.5就出來什麼,但2

所有這些數字可以用二進制浮點正確表示。

我不想說我不相信你的例子,但我不知道。 :-)

但是,我相信你可能會遇到諸如1.1之類的問題。

爲什麼?因爲1/10變成二進制的重複小數。

,問題就來嘗試轉換浮點十進制和二進制表示法之間的點對點數字時。一些數字成行很好,但其他的則只能近似。然而,如果你的例子真的是這樣工作的,我不知道發生了什麼,我很想知道。但是,如果你的例子真的這樣工作,我不知道發生了什麼,我很想知道。

4

浮點數總是僅僅是近似值。 :-)如果精度問題,想出一個辦法來使用整數。

根據我的經驗,當我使用十進制數據類型,而不是浮點/雙,我總是得到精確的結果。