提问人:kenshieva 提问时间:8/3/2022 最后编辑:kenshieva 更新时间:8/3/2022 访问量:176
C# double 到浮点数转换问题
C# double to float conversion issue
问:
感谢您阅读本文。
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. 因此,当我从 double 显式转换为 float 并且数字那么大时,这意味着浮点数的指数部分只有 8 位,因此会溢出。其他 3 位是否只是在如此大的数字的情况下“滑落”或会发生什么?
此外,当我对 (int) 做同样的事情时,它也会给我一个非常奇怪的响应。
谁能解释一下为什么这是我得到的响应,以及当双精度的指数部分太大而无法放入浮点数之一时发生?
答:
2赞
StriplingWarrior
8/3/2022
#1
它不会转换为 (八)。它被转换为无穷大,其表示 () 看起来像一个横向的 8。无论您在何种环境中查看输出,都可能显示此内容,就像由于字体或区域性设置一样。8
∞
8
具体来说,它是 PositiveInfinity,其文档澄清了:
当操作的结果大于 时,将返回此常量。
MaxValue
评论
wow
Infinity
wow.ToString()
∞
Console.WriteLine()