如何使用科学计数法存储数字?

Posted

技术标签:

【中文标题】如何使用科学计数法存储数字?【英文标题】:How to store numbers using scientific notation? 【发布时间】:2014-09-08 09:32:20 【问题描述】:

标题说明了一切:有没有办法使用科学计数法来存储一个非常大的数字? BigInteger i = 1.9891*10^30 之类的东西?

为了记录,我正在尝试存储太阳的质量。事实上,最后,我希望能够存储几颗恒星和行星的质量,更不用说它们的半径、表面积、体积等。而且我认为存储完整值会占用大量内存.

或者我是否需要创建自己的类来处理科学计算并存储这些值?

编辑

我的意思是,如果我存储数字 1.9891e30,将使用多少磁盘空间?就好像我存储了 19891000000000000000000000000000 或更少?

【问题讨论】:

***.com/questions/2944822/… 的副本 @CodeNewbie 我不认为它是重复的。我不仅要问如何科学地显示数字,还要问是否有办法存储它,以便占用比完全写入的值更少的磁盘空间。我将更新 OP 以添加一些说明。 Is there a good javascript BigDecimal library?的可能重复 【参考方案1】:

尝试使用 E 而不是 *10^30 所以:

BigInteger i = 1.9891E30?

我不确定您是否不必为此使用double

要以科学计数法显示,请使用printf() 方法和%g 标志以科学计数法显示,如下所示:

System.out.printf("%g", i);

【讨论】:

【参考方案2】:

既然您想知道以科学计数法存储值是否有助于节省内存,我想向您指出the JLS。

double 数据类型是双精度 64 位 IEEE 754 浮点数。

因此,当您存储数字 1989100000000000000000000000000 时,您仍将使用 8 个字节的数据。您可以将其表示为 1.9891E30(查看 this answer 以获得代码帮助)或 19891000000000000000000000000000,但这不会以任何方式改变存储大小。

【讨论】:

【参考方案3】:

为什么不使用double?您最多可以存储 10^4931 左右的值。

对于显示值,您可以使用format(参见here)或NumberFormat(参见here)。

【讨论】:

以上是关于如何使用科学计数法存储数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试数字是不是存在科学记数法? [关闭]

SAS - 从带有科学计数法数字的csv文件导入时如何保留实际数字

Excel中科学计数法如何转正常显示

如何让mssqlreal不用科学计数法显示

python 输出数字,如何不以科学计数法输出?

java字符串转数字如何不显示科学计数法