2014-01-23 23 views
10

如果我想要一個轉換爲和回是完全匹配,我會使用類似:生產往返字符串小數類型

double d1 = 1/3.0; 
string s = d1.ToString("R"); 
double d2 = double.Parse(s); 

但是,「R」格式未定義爲十進制類型(您會得到一個「FormatException:格式說明符無效」)。

什麼是生成十進制類型的往返字符串的方法?

+0

該代碼是有效的C#,並且(對於給定示例,至少)按預期/描述工作。我不知道現在的代碼是否是@musefan所看到的。 –

+0

@TimS .:實際上,我錯過了整個'double' /'decimal'的東西......我的錯誤 – musefan

+1

小數的字符串格式已經是小數的確切值。 **這是小數點**。 –

回答

10

decimal往返的默認輸出格式,所以你不必做任何特殊的事情。就像這個意義上的int一樣。

+0

爲了確保「1.20」產生1.20米而不是1.2米,必須使用什麼轉換方法來從字符串中產生小數? – supercat

+0

@supercat:你可以使用'decimal.Parse(「1.20」)'返回1.20m - 如果你使用double.Parse(「1.20」)'你會得到1.2d回來。 – Gabe

+0

我感到困惑,因爲VB.NET即時模式打印函數[我用來測試簡單.NET方法的行爲]由於某種原因截斷了尾隨零;添加'.ToString()'固定。 – supercat

3

Decimal事實上是一個二進制十進制值(它使用的,不基地作爲Double),這就是爲什麼沒有必要特別的確切表示喜歡ToString("R");

Decimal value = 123.456m; 
    String result = value.ToString(CultureInfo.InvariantCulture); // <- That's enough 

還詳見:

http://csharpindepth.com/articles/general/decimal.aspx

1

如果你嘗試,

decimal d1 = 1m/3; 
string s = d1.ToString(); 
decimal d2 = decimal.Parse(s); 
// where d1 == d2 = true 

你會看到你不需要任何額外的格式選項,以獲得正確的string表示。