簡體   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