java中的浮点乘法

时间:2011-12-14 14:23:37

标签: java rounding multiplication

  

可能重复:
  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 个答案:

答案 0 :(得分:4)

如果您想要准确的浮点计算,请不要使用floatdouble类型,而应使用BigDecimal类。

答案 1 :(得分:1)

你做不到。计算机中的浮点数和双精度数不能代表所有可能的值。

答案 2 :(得分:1)

这是floating point calculations的副作用,并且很好理解,但不一定直观。这个问题实际上已经被问了几千次,你需要研究浮点运算是如何工作的。

要解决这个问题,如果你只需要2位小数精度,那么请改用整数。

例如,如果您正在处理货币,并且您想要以4.95美元购买100件物品,那么您将该值的成本表示为整数“495”,乘以100,这将为您提供“ 49500" 。您始终将最后两位数视为美分,因此“49500”为495.00美元。