2014-01-30 49 views
0

的WinForms,我有一個文本框離開事件,在文本框中提示用戶添加價格例如:格式化數字的字符串與地方小數點無論文化

他需要提供的價格文本框讓我們說他只寫5,文本框離開事件應該讓他5.00和它的工作,但其他計算機上使用其他文化,例如在我遇到問題的計算機上有問題點'.'這被視爲逗號這個','並且如果用戶提示5.43他將得到543,00而不是5.435得到5.00他將得到逗號。無論文化如何,我都需要爲每一臺計算機而努力。 這裏是我的代碼:

decimal number = 0; 
if (Decimal.TryParse(textBox20.Text, out number)) 
{ 
    textBox20.Text = Decimal.Parse(textBox20.Text).ToString("0.00"); 
} 
else 
{ 
    textBox20.Text = "0.00"; 
} 
+0

[Decimal.TryParse不能解析我的十進制值]的可能重複(http://stackoverflow.com/questions/11311570/decimal- tryparse-doesnt-parse-my-decimal-value) – dasblinkenlight

+0

這是完全不同的租金問題沒有重複 – user3144640

回答

1

只需使用的decimal.TryParse超載這需要一個IFormatProvider,並指定固定區域性。然後用它來格式化。 (我假設你希望在解析和格式化時將它作爲「小數點分隔符」一致對待)。

哦,只解析一次 - 爲什麼要這樣做兩次?

decimal number = 0; 
if (Decimal.TryParse(textBox20.Text, NumberStyles.Number, 
        CultureInfo.InvariantCulture, out number)) 
{ 
    textBox20.Text = number.ToString("0.00", CultureInfo.InvariantCulture); 
} 
else 
{ 
    textBox20.Text = "0.00"; 
} 

鑑於0將被格式化這種方式爲好,你甚至不需要什麼是有條件的:

decimal number; 
decimal.TryParse(textBox20.Text, NumberStyles.Number, 
       CultureInfo.InvariantCulture, out number); 
textBox20.Text = number.ToString("0.00", CultureInfo.InvariantCulture); 

我們不關心的TryParse在這種情況下返回值,因爲如果失敗,number將爲0,這很好...

+0

謝謝Jon Skeet – user3144640

+0

Jon Skeet我添加了一個問題,請回答確定你是誰可以回答我的問題。鏈接:http://stackoverflow.com/questions/21479745/set-culture-invariant-for-whole-applicationthread-point-instead-of – user3144640

+0

@ user3144640:請不要留下評論,只是詢問其他問題。試想一下,如果每個認爲我能回答他們問題的人都這樣做了。 –