标题说明了一切:有没有办法用科学记数法存储一个非常庞大的数字?
像BigInteger i = 1.9891*10^30
?
为了记录,我正试图存储太阳的质量。事实上,最后,我希望能够存储几颗恒星和行星的质量,更不用说它们的半径,表面积,体积等等。我认为存储完整的值会用到很多记忆
或者我是否需要制作自己的类来处理科学计算并存储这些值?
修改
我的意思是,如果我存储号码为1.9891e30,将使用多少磁盘空间?如果我存储1989100000000000000000000000000,或更少?
答案 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)