我正在尝试用 Java 执行以下数学方程式:
(44334*(220*220))+ (81744*220) + 39416)
当我在 WolframAlpha(或 Google)中输入相同的方程时,我得到:
2163788696
在java中我得到负数..
我一直在努力找出发生这种情况的原因,但没有运气。 我还尝试将答案保存在 BigInteger 中,但随后我得到负值,因为数字太大。
我该怎么办?
最佳答案
编辑:要处理整数回绕,请使用 long
:
System.out.println("Result: " +
(44334L * 220 * 220 + 81744 * 220 + 39416)); // 2163788696
加号运算符是左结合的(无论是用于字符串连接还是加法),所以如果整个算术表达式没有括号,它会将子表达式的结果作为单独的字符串从左到对。
左操作数决定+是用于字符串连接还是加法。在这种情况下,第一个操作数是一个字符串,因此右侧 ((44334*(220*220))
) 也被转换为一个字符串。第一个 + 运算符的结果是一个字符串,用作另一个 + 字符串连接操作的左侧。下一个操作数 ((81744*220)
) 再次转换为字符串。
您可以将整个算术表达式括起来以避免这种情况。
关于Java : large integer numbers error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14095065/