2013-05-09 33 views
3

我有這個double值:的String.Format(格式的doubleValue),精密失去

var value = 52.30298270000003 

,當我將其轉換爲string,它損失了精度

var str = string.Format("{0} some text...", value); 
Console.WriteLine(str); // output: 52.3029827 

的數量精度對我的double值可能會在運行時更改。如何強制string.Format方法全部使用精度

回答

6

您要使用的R格式說明

MSDN

結果:一個字符串,往返於相同的號碼。

支持:單人,雙人和BigInteger的。

精度說明符:忽略。

更多信息:The Round-trip ("R") Format Specifier

String.Format("{0:R} some text...", value) 

會給你

52.30298270000003 some text... 
+0

啊,我需要計算器更多的練習,你們是快:)!好東西,夥計。 – 2013-05-09 13:48:09

3

試試這個:

var value = 52.30298270000003; 

var str = string.Format("{0} some text...", value.ToString("R")); 
Console.WriteLine(str); // output: 52.3029827 

的MSDN documnetation有以下談談單打和雙打的ToString方法和使用ToString("R")

默認情況下,返回值僅包含精度爲 的7位數字,但內部最多保留9位數字。如果此實例的值 具有大於7位,的ToString(String)返回 PositiveInfinitySymbol或NegativeInfinitySymbol代替 預期數目。如果需要更高的精度,指定與 的「G9」的格式規範,其中總是返回 精度9位,或「R」,它返回7個位數如果數量可以是與該精度表示 或9個數字,如果格式號碼只能是 以最大精度表示。

+1

雙如何成爲單身? – leppie 2013-05-09 13:50:45

+0

當你說「雙重基本上是單一的」時,你的意思是什麼? – LukeH 2013-05-09 13:51:24

+0

對不起,我的意思是浮動和單一,然後將其更改爲雙倍:編輯答案不要太混亂。 – Maloric 2013-05-09 14:00:01