2011-12-14 82 views
1

可能重複:
How to round a number to n decimal places in Java浮點乘法

相乘時在Java中的兩個數字會發生這樣的:

double a = 9.495 * 100; 

預期結果:

a = 949.5; 

但得到的結果是:

a = 949.4999999999999 

當我試圖輪數9.495在小數點後兩位的結果是9.49,而不是9.50

任何想法如何解決這個問題?

+3

這是對浮點數如何工作的經典誤解。請查閱關於此主題的許多現有問題。 – 2011-12-14 14:27:43

+1

請參閱http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency。這個問題幾乎每天都被問到。 – 2011-12-14 14:28:02

回答

3

如果您需要準確的浮點運算,請不要使用floatdouble類型,而應使用BigDecimal類。

1

你不行。計算機中的浮點和雙精度數字不能表示所有可能的值。

+0

,不知道爲什麼這是投票下來 – 2011-12-14 14:31:59

1

這是floating point calculations的副作用,並且很好理解,但不一定直觀。這個問題實際上已經有數千次的問題了,你需要研究浮點算法是如何工作的。

爲了解決這個問題,如果你只需要2位精度,那就用整數來代替。

例如,如果您要處理的是貨幣,而您想要以4.95美元的價格購買100件商品,那麼您將該值的成本表示爲「495」的整數,乘以100即可得出「49500」。您總是將最後兩位數字視爲分,因此「49500」爲$ 495.00。

+0

和這一個?爲什麼正確答案被否決? – 2011-12-14 14:33:07