繁体   English   中英

C# 双浮点数转换问题

[英]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。所以当我将双精度数显式转换为浮点数并且数字很大时,这意味着指数部分只有 8 位的浮点数,因此溢出。 其他 3 位是否只是在如此大的数字的情况下“滑掉”还是会发生什么?

此外,当我为 (int) 做同样的事情时,它也会给我一个非常奇怪的反应。

谁能解释我为什么这是我得到的响应以及当双精度的指数部分太大而无法放入浮点数时发生的情况?

它不会转换为8 (八)。 它被转换为无穷大,其表示 ( ) 看起来像横向八。 由于字体或文化设置,无论您在何种环境中查看 output,都可能显示为8

具体来说,它是PositiveInfinity ,其文档阐明:

当运算结果大于MaxValue时返回此常量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM