java中的浮点乘法
可能重复:
如何在Java中将数字舍入到n个小数位
当在java中乘以两个数字时,会发生以下情况:
double a = 9.495 * 100;
预期结果:
a = 949.5;
但获得的结果是:
a = 949.4999999999999
当我尝试以小数点后两位舍入数字9.495时,结果是9.49而不是9.50
任何想法如何解决这个问题?
如果您想要精确的浮点计算,请不要使用float
或double
类型,而是使用BigDecimal
类。
你不能。 计算机中的浮点数和双精度数不能代表所有可能的值。
这是浮点计算的副作用,并且很好理解,但不一定是直观的。 这个问题实际上已经被问了几千次,你需要研究浮点运算是如何工作的。
要解决这个问题,如果您只需要2位小数精度,那么请使用整数。
例如,如果您正在处理货币,并且您想以4.95美元购买100件物品,那么您将该值的成本表示为整数“495”,乘以100,即可得到“49500”。 你总是将最后两位数视为美分,所以“49500”是495.00美元。