2011-12-14 79 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