簡體   English   中英

為什么在C#中准確表示了一些浮點數?

[英]Why are some floating point numbers accurately represented in C#?

受到這個問題的啟發,以下內容並沒有達到我的預期:

float myFloat = 0.6;
Console.WriteLine(myFloat);
// Output: 0.6

我希望上面打印出0.600000023841857910.6的浮點表示) - 顯然這里有一些機制使得這個工作實際上它不應該(雖然你可以從鏈接的問題看到它有時不會不行

這個機制是什么?它是如何工作的?

如果你看一下Console.WriteLine的實現,你會看到它最終使用默認的FormatProvider調用ToString 即您看到的結果是使用此格式提供程序格式化時數字的顯示方式。

雖然它沒有解釋結果如何產生的細節,但它確實顯示Console.WriteLine在打印之前會對值進行一些格式化。

我猜想,當將它轉換為字符串時,采用浮點數的WriteLine重載會進行舍入...

0.6不能用IEEE754浮點數表示。 它位於0.599999964237213134765625(0x3f199999)和0.600000083446502685546875(0x3f19999b)之間。 舍入到最近模式產生0.60000002384185791015625(0x3f19999a),這是WriteLine正在打印的內容。

您必須使用更高精度的浮點表示(雙精度)或限制WriteLine打印的小數位數:

float f = 0.6; Console.WriteLine("{0:N6}", f);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM