2017-04-18 97 views
0

在En-US語言環境中,我有一個小數值14780,德文的預期輸出是14.780。但是尾隨零並沒有取得。十進制轉換本地化(德語)

Decimal.Parse(的String.Format( 「{0:N0}」,14780),System.Globalization.CultureInfo.InvariantCulture)

觀察輸出:14.78

回答

0
  1. System.Globalization.CultureInfo.InvariantCulture是不一樣的如Germande-DE)。解析並轉換爲字符串時,通常通過在Parse/TryParseFormat方法中指定區域性使用相同的區域性。對一個人使用英語(不變)而對另一個使用德語會導致意想不到的結果,因爲小數和逗號在文化之間具有相反的含義。永遠不要假設該線程提供的文化,除非你知道該文化是什麼,它不能改變。
  2. 除非您使用科學記數法,否則即使保留但使用指數,尾數0也不會從小數點左邊開始丟棄。也許你沒有正確輸入你的問題,並指的是數字的右側(小數部分)?

代碼示例:

var value = 14780M; 
var strValue = string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:n0}", value) 
// strValue is equal to "14.780" 

這裏是你的代碼,上面顯示,它使用相同的文化,但休息時,當你混合文化的作品。

// OK - using InvariantCulture for both 
var culture = System.Globalization.CultureInfo.InvariantCulture; 
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), culture)); 

// OK - using de-DE for both 
culture = System.Globalization.CultureInfo.GetCultureInfo("de-DE"); 
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), culture)); 

// FAIL - mixing de-DE and InvariantCulture 
culture = System.Globalization.CultureInfo.GetCultureInfo("de-DE"); 
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), System.Globalization.CultureInfo.InvariantCulture)); 

Fiddle