The Prototype Asked:2020-05-28 18:21:41 +0000 UTC2020-05-28 18:21:41 +0000 UTC 2020-05-28 18:21:41 +0000 UTC Double.MIN_VALUE - 1.0D 772 有一个代码: System.out.println(Double.MIN_VALUE - 1.0D); 为什么会有结果-1.0? java 3 个回答 Voted Best Answer Kromster 2020-05-28T18:57:31Z2020-05-28T18:57:31Z 根据 IEEE-754 标准,点数可以写成指数形式。这种格式提供了或多或少的固定精度(例如,对于 32 位 - 大约 7 个字符),但范围很广(大约 +/-10 到 38 度)。 因此,MIN_VALUE这是可以以这种格式(对于 32 位 - 大约 10^-38)写入的最小非零数字(不考虑符号)。 因此,如果你取一个很小的数 ( Double.MIN_VALUE),然后从中减去一个,那么你将得到减一和一个很小的部分,这将丢失,因为 它不在 1 左右的 7 位数字的“精度”范围内。 也就是说,粗略地说,你会得到类似 的东西-1.0000000000000000000000000000123,它将被“四舍五入”并写成-1.0000000。 另外:为什么将大数写入浮点数时末尾的数字会发生变化? user236980 2020-05-28T19:02:41Z2020-05-28T19:02:41Z 因为Double.MIN_VALUE——这实际上不是可以写入的最小数double,而是尽可能接近零的值。您可以存储的最小值double是-Double.MAX_VALUE. Alexander Ozertsov 2020-05-28T18:31:59Z2020-05-28T18:31:59Z 因为java中没有零。这是因为不可能将 2 表示到 0 的程度。为了解决这个问题,引入了 MIN_VALUE。这是最接近零的数字(而不是最小值)。您可以在此处阅读有关数字表示的更多信息。
根据 IEEE-754 标准,点数可以写成指数形式。这种格式提供了或多或少的固定精度(例如,对于 32 位 - 大约 7 个字符),但范围很广(大约 +/-10 到 38 度)。
因此,
MIN_VALUE这是可以以这种格式(对于 32 位 - 大约 10^-38)写入的最小非零数字(不考虑符号)。因此,如果你取一个很小的数 (
Double.MIN_VALUE),然后从中减去一个,那么你将得到减一和一个很小的部分,这将丢失,因为 它不在 1 左右的 7 位数字的“精度”范围内。也就是说,粗略地说,你会得到类似 的东西
-1.0000000000000000000000000000123,它将被“四舍五入”并写成-1.0000000。另外:为什么将大数写入浮点数时末尾的数字会发生变化?
因为
Double.MIN_VALUE——这实际上不是可以写入的最小数double,而是尽可能接近零的值。您可以存储的最小值double是-Double.MAX_VALUE.因为java中没有零。这是因为不可能将 2 表示到 0 的程度。为了解决这个问题,引入了 MIN_VALUE。这是最接近零的数字(而不是最小值)。您可以在此处阅读有关数字表示的更多信息。