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

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

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

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

编辑

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

【问题讨论】:

标签: java


【解决方案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)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 2021-04-04
        • 2012-06-22
        相关资源
        最近更新 更多