java中的浮点乘法

可能重复:
如何在Java中将数字舍入到n个小数位

当在java中乘以两个数字时,会发生以下情况:

double a = 9.495 * 100; 

预期结果:

 a = 949.5; 

但获得的结果是:

 a = 949.4999999999999 

当我尝试以小数点后两位舍入数字9.495时,结果是9.49而不是9.50

任何想法如何解决这个问题?

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

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

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

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

例如,如果您正在处理货币,并且您想以4.95美元购买100件物品,那么您将该值的成本表示为整数“495”,乘以100,即可得到“49500”。 你总是将最后两位数视为美分,所以“49500”是495.00美元。