为什么会出现下面的代码:
System.out.println((int)(19.99 * 100));
产生结果“1998”?
最佳答案
舍入误差。如果您在没有转换的情况下查看计算结果,您会得到:
1998.9999999999998
因此,当您转换为 int 时,小数部分被舍去,而不是四舍五入,您得到 1998。
道德是,如果你需要一个确切的答案,根本不要使用 float/double。如果您谈论的是货币等离散值,请使用 int 并处理原子单位(例如便士)。如果您确实需要精确的小数,那么 BigDecimal
是您的 friend 。
虽然您可以在此处使用 Math.round()
来避免结果,将结果带到预期的位置,但这并非在所有情况下都有效,并且无法解决根本问题。
关于java - java计算的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11827641/