是否有 Java 数据类型超过 double 的数字精度?

Is there Java data type exceeding digit precision of double?

是否有一种数据类型可以 handle/store 超出 Java 类型的数字? 据我所知,Java double 类型可以存储 1.0E+38 到 1.0E-45 范围内的数字。

如果我需要 Java 程序读取超过 1.0E+38 和 1.0E-45 数字精度的数字怎么办?例如 1.0E-180。目前这些数字被识别为 0.0 。 不要问我为什么需要这么荒谬的数字。我得到了给我的东西。

As far as I know, Java type double can store numbers in range 1.0E+38 to 1.0E-45.

不正确;它可以达到 1.7976931348623157 * 10^3084.9406564584124654 x 10^-324.

但是double最多只能存2^64个数(原因:想想看。鸽子洞原理)。在 0 和 1 之间有无数个数字,更不用说在这两个极端之间了。 doubles 通过一直默默地四舍五入到最接近的数字来工作,该数字是所选的少数 2^64 之一。让我们呼唤那些幸福的数字吧。

这些数字分布不均。在 0 附近,有 很多,当你远离 0 时,它们会越来越少。最终(在 2^52 左右),任意 2 个祝福数字之间的距离大于 1.0.

BigDecimal 是一种解决方案。还有其他的(对于初学者来说,double CAN 代表 1e-108 - 你在你的 'translate input data to a double value' 代码中做错了什么),但请记住,在那些极端情况下,double 是非常不准确的。

BD 这样的数字非常慢,开箱即用,BD 不能开箱即用(出于同样的原因,你不能将 1 除以 3 并得到完美的结果:0.333333...那在哪里停止?) - 你需要配置它以便它在某个时候切断。它们很难使用,但也许是您唯一的选择。