如何使用科学计数法存储数字?
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)。
【讨论】:
以上是关于如何使用科学计数法存储数字?的主要内容,如果未能解决你的问题,请参考以下文章