java - java计算的意外结果

标签 java

为什么会出现下面的代码:

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/

相关文章:

java - 等同于 Java 中 Rust 的 match 语句

java - 将值添加到 recyclerView 的部分中

java - 如何使用邻接矩阵查找节点是否连接在边加权图上

java - 如何用符号 '*' 替换给定字符串 s 中的所有非字母

java - ch14Eamples.MultipleStageDemo.main 处 Unresolved 编译(MultipleStageDemo.java :24)

java - "error: cvc-elt.1: Invalid type"在 Java 中验证 xml 时

java - 如何从 JNDI 变量初始化 web.xml 中的值?

java - 如何在正则表达式中分组

java : annotations before method parameters

java - 将 java.util.logging 与 JDBC 驱动程序一起用于 HyperSQL 数据库引擎