如何在Java中计算整数表达式

Mic*_*ael 1 java math floating-point integer

假设,我需要计算3 * (2 / 3) = 2但是3 * (2 / 3) = 0在整数运算中.因此,它看起来像我应该使用浮点运算3 * (2.0 / 3) = 2.0浮点结果int.

是否有意义?你怎么会避免在这里施展?

NPE*_*NPE 5

在这个特定的例子中,你可能最好将表达式重新排列为3 * 2 / 33 / 3 * 2.这样,您将仅使用整数数学获得精确结果.

使用浮点数学是更通用的解决方案,但您需要了解舍入问题.一般来说,你不应该期望它x * (y / x)会准确地给你什么y时候xy浮点数.

如果您知道结果是整数,或者只是想将其四舍五入到最接近的整数,则可以使用Math.round():

Math.round(3 * (2f / 3))
Run Code Online (Sandbox Code Playgroud)

简单地铸造的结果int是不是一个好主意,因为浮点数是不精确的,而这样的投只会截断数.