相乘时在Java中的两个数字会发生这样的:
double a = 9.495 * 100;
预期结果:
a = 949.5;
但得到的结果是:
a = 949.4999999999999
当我试图轮数9.495在小数点后两位的结果是9.49,而不是9.50
任何想法如何解决这个问题?
相乘时在Java中的两个数字会发生这样的:
double a = 9.495 * 100;
预期结果:
a = 949.5;
但得到的结果是:
a = 949.4999999999999
当我试图轮数9.495在小数点后两位的结果是9.49,而不是9.50
任何想法如何解决这个问题?
如果您需要准确的浮点运算,请不要使用float
或double
类型,而应使用BigDecimal
类。
你不行。计算机中的浮点和双精度数字不能表示所有可能的值。
,不知道为什么这是投票下来 – 2011-12-14 14:31:59
这是floating point calculations的副作用,并且很好理解,但不一定直观。这个问题实际上已经有数千次的问题了,你需要研究浮点算法是如何工作的。
为了解决这个问题,如果你只需要2位精度,那就用整数来代替。
例如,如果您要处理的是货币,而您想要以4.95美元的价格购买100件商品,那么您将该值的成本表示为“495”的整数,乘以100即可得出“49500”。您总是将最后两位数字视为分,因此“49500”为$ 495.00。
和这一个?为什么正确答案被否决? – 2011-12-14 14:33:07
这是对浮点数如何工作的经典误解。请查阅关于此主题的许多现有问题。 – 2011-12-14 14:27:43
请参阅http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency。这个问题几乎每天都被问到。 – 2011-12-14 14:28:02