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

时间:2014-09-08 09:32:21

标签: java

标题说明了一切:有没有办法用科学记数法存储一个非常庞大的数字? 像BigInteger i = 1.9891*10^30

这样的东西

为了记录,我正试图存储太阳的质量。事实上,最后,我希望能够存储几颗恒星和行星的质量,更不用说它们的半径,表面积,体积等等。我认为存储完整的值会用到很多记忆

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

修改

我的意思是,如果我存储号码为1.9891e30,将使用多少磁盘空间?如果我存储1989100000000000000000000000000,或更少?

3 个答案:

答案 0 :(得分:2)

尝试使用E代替* 10 ^ 30,所以:

BigInteger i = 1.9891E30?

我不确定你是否不必使用double来获取它

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

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

答案 1 :(得分:1)

由于您想知道以科学记数法存储值是否有助于节省记忆,我想指出the JLS

  

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

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

答案 2 :(得分:0)

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

要显示价值,您可以使用format(请参阅here)或NumberFormat(请参阅here)。