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