Java-物理计算的数据类型是什么?

Java-物理计算的数据类型是什么?,java,math,types,physics,Java,Math,Types,Physics,我正在尝试用Java创建一个物理计算程序。因此,我使用了一些公式,但它们总是返回错误的值。我把它们分开,发现:(到目前为止,我使用了long) 这显然是错误的。公式中有分数和非常高的数字,例如6.095E23和4.218E-10 那么,哪种数据类型最适合获得正确的结果呢 除非你有很好的理由不这样做,double是物理计算的最佳类型。这对电影《星际》中的虫洞模型来说已经足够好了,所以,我敢说,对你来说可能已经足够好了。请注意,作为一个粗略的指南,它只提供15位小数的精度有效数字 但您需要帮助Jav

我正在尝试用Java创建一个物理计算程序。因此,我使用了一些公式,但它们总是返回错误的值。我把它们分开,发现:(到目前为止,我使用了
long

这显然是错误的。公式中有分数和非常高的数字,例如6.095E23和4.218E-10


那么,哪种数据类型最适合获得正确的结果呢

除非你有很好的理由不这样做,
double
是物理计算的最佳类型。这对电影《星际》中的虫洞模型来说已经足够好了,所以,我敢说,对你来说可能已经足够好了。请注意,作为一个粗略的指南,它只提供15位小数的精度有效数字

但您需要帮助Java编译器:

写入
8.0*830584000
,以便在
double
精度中计算该表达式
8.0
是一个
double
文本,导致其他参数升级为类似类型

目前,您正在使用整数算术,并正在观察环绕效果


参考资料:

如果您需要大十进制数的精确性,BigDecimal是一个不错的选择,尽管它会以性能为代价。如果你知道你的数字没有那么大,你可以用long来代替。long应该更快一些,但是它的范围要有限得多,需要你从十进制数转换为十进制数。

由于物理计算涉及大量的浮点运算,所以在这种计算中,浮点数据类型是一个很好的选择。我希望这会有帮助

也许是bigDecimal?你的问题并没有提供足够的信息。除了
double
BigDecimal
之外,还可以看看
long
biginger
。除了缺少信息之外,当我在Java中进行乘法时(使用long),我得到的结果是:6644672000。您的乘法示例适合“long”。看起来你还在用ints?有关有理数,请检查“Spire”或任何其他“数值数据类型”库。您的常量是
int
文字,而不是
long
,因此计算溢出。(以后是否将其分配给
long
变量并不重要;损坏已经完成。)如果尝试
8L*830584000L
,您将得到正确的输出:6644672000。@Kinaeh:请留出几周时间来理解什么是
double
:从链接开始?
BigDecimal
仍然是更好的选择。@Kinaeh在长时间内做这件事也很好,如果您做得正确。@Kinaeh:的确,8*int是一种int类型。不管你把它分配给一个长的:概念上是之后发生的。@Kinaeh:原谅我,但我无法抗拒。IMHO C++是迄今为止物理计算的高级语言,其次是FORTRAN语言。如果前端需要java,我会认真考虑用java做演示,C++中的计算(甚至C),使用JNI来链接这两个。
8 * 830584000 = -1945262592