谢谢你读这篇文章。
c#中的浮点数范围为+- 3.4 * 10^38,双1.7 ^308考虑以下程序:
using System;
double nice;
float wow;
nice = 1.50* Math.Pow(10,300);
wow = (float) (nice);
Console.WriteLine(nice);
Console.WriteLine(wow);
output:
1,5E+300
8这让我很困惑,怎么能把这么大的一个数字转换成8作为一个浮动呢?当我们把双浮点数转换成浮点数时,浮点数的尾数为23位,指数为8位,双52位,11位。所以当我从双位转换为浮点数时,数字是那么大,这意味着浮点数的指数部分只有8位,因此是溢出。其他的3位只是为了防止这么多的“被滑掉”,还是会发生什么?
同样,当我对一个(int)做同样的事情时,它也给了我一个非常奇怪的反应。
,有人能解释一下为什么这是我得到的响应吗?当双倍的指数部分太大而不适合浮动?时,什么时候会发生?
发布于 2022-08-02 18:45:26
它没有转换为8 (8)。它被转换成无穷大,它的表示形式(∞)看起来像一个侧面的8。由于字体或区域性设置,无论您在哪个环境中查看输出,都有可能像8一样显示输出。
具体来说,是PositiveInfinity,它的文档澄清了:
当操作的结果大于
MaxValue时,返回此常量。
https://stackoverflow.com/questions/73212265
复制相似问题