我正在尝试用Java创建一个物理计算程序。因此我使用了一些公式,但它们总是返回错误的值。我把它们分开然后发现:(到目前为止,我使用了long
。)
8 * 830584000 = -1945262592
这显然是错误的。公式中有分数和非常高的数字,例如6.095E23和4.218E-10。
那么什么数据类型最适合获得正确的结果?
答案 0 :(得分:3)
除非你有充分的理由不这样做,double
是物理计算的最佳类型。电影“星际”中的虫洞建模已经足够了,所以,我敢说,它对你来说可能已经足够了。请注意,尽管如此,作为一个粗略的指南,它只给出15个十进制有效精度数字。
但是你需要帮助Java编译器:
为要以8.0 * 830584000
精度计算的表达式写double
。 8.0
是一个double
字面值,导致其他参数提升为类似的类型。
目前您正在使用整数算术,并且正在观察环绕效果。
参考:https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
答案 1 :(得分:2)
如果你需要大十进制数的完美精确度,BigDecimal是要走的路,尽管它会以性能为代价。如果您知道数字不是那么大,那么您可以使用long而不是更快,但是范围更有限,并且需要您从十进制数转换为十进制数。
答案 2 :(得分:0)
由于物理计算涉及大量浮点运算,因此浮点数据类型在此类计算中可能是一个不错的选择。我希望它会有所帮助。 :)