2013-01-09 56 views
1

我使用下面的代碼:雙串轉換

string.Format("{0:###,###,###,###,###.00}",12005557590928.143); 

的雙值轉換爲字符串。

它給了,如果我將其更改爲

string.Format("{0:###,###,###,###,###.##}",12005557590928.143); 

我得到的輸出爲 「12,005,557,590,928.10」

。 「12,005,557,590,928.1」。

如何獲得輸出爲「12005557590928.143」?

+1

這裏是一個鏈接,可以顯示所有使用'string.Format' HTTP方式://www.csharp -examples.net/string-format-double/ – MethodMan

回答

3

你看到的,因爲你使用了數數據類型的精度誤差。嘗試使用定點數類型(在這種情況下,decimal):

string.Format("{0:###,###,###,###,###.###}", 12005557590928.143m); 
+0

@Rotem - 有趣。 MSDN曾經把它稱爲定點。他們的文檔實際上仍然說「與浮點相比......」。 –

1

我相信你想string.Format("{0:###,###,###,###,###.000}",12005557590928.143); (注意最後多餘的零)

+0

我不認爲他最後需要零。 –

+0

是啊........... –

1

您可以使用

(12005557590928.143).ToString("R") 

定製數字格式字符串絕不會透露的超過15個十進制數字System.Double。如果您需要更高的精確度,請考慮使用System.Decimal

如果你的目標是揭示Double的「隱藏」的數字,使用標準數字格式字符串"R"(「往返」)或"G17"(「一般」的17位數字)。

1

嘗試.ToString("R")

Console.WriteLine((12005557590928.143).ToString("R")); 

這裏是一個DEMO

1
Console.Write(string.Format("{0:0.000}", (12005557590928.143m))); 
+0

這產生'「12005557590928.143」'逗號怎麼樣? – MethodMan

+0

的問題是「我怎樣才能得到輸出爲‘12005557590928.143’?」 ... –

+0

真實的,但看接受的答案,我想這就是爲什麼.. – MethodMan