2014-02-19 25 views
0

在具有組分隔符和小數點分隔符顯示相同輸出的解析編號上。在主線程中更改CurrencyGroupSeparator和CurrencyDecimalSeparator

例如:

decimal.parse("2,00", Currency) // output is 2 
decimal.parse("2.00", Currency) // output is 2 

CultureInfo CADCultureref = new CultureInfo("fr-CA"); 
CADCultureref = Thread.CurrentThread.CurrentCulture; 
NumberFormatInfo CADNumFormatref = new NumberFormatInfo(); 
CADNumFormatref = Thread.CurrentThread.CurrentCulture.NumberFormat; 

CADNumFormatref.CurrencyGroupSeparator = "."; 
CADNumFormatref.CurrencyDecimalSeparator = ","; 
CADCultureref.NumberFormat = CADNumFormatref; 
Thread.CurrentThread.CurrentCulture = CADCultureref; 
Thread.CurrentThread.CurrentUICulture = CADCultureref; 

decimal number = Decimal.Parse("2,00$", System.Globalization.NumberStyles.Currency | System.Globalization.NumberStyles.Number); 

// Output is 2 and 
Decimal.Parse("2.00$", System.Globalization.NumberStyles.Currency | System.Globalization.NumberStyles.Number); 
// Output is 2 

所以我的問題是,爲什麼兩者都給予同樣的輸出,因爲我已經改變了他們的分隔符。

+1

請格式化您的問題更仔細 - 我敢肯定你的代碼看起來不是那麼真實。此外,你談論「輸出」,但沒有輸出 - 你解析,然後忽略結果。一個簡短的*完整*程序展示這個問題會讓你更容易幫助你。 –

回答

0

我不得不同意喬恩的看法,格式化讓人很難理解。首先所有的二線不會導致值2,你必須把它改寫爲:(!不是2)

var result = decimal.Parse("200", NumberStyles.Currency); 

這將導致價值200。你在中間部分都在做文化信息,雜技可以縮短到

var result = decimal.Parse("2.00$", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US")); 
Console.WriteLine(result); 
// output on console is 2 

解析法將帶您要用於轉換爲第三個參數的這種文化的超載。

如果你把另一種文化,如fr-CA,將會拋出FormatException。所以這是正確的,在這一點上,我對你現在想做的事情感到困惑?你想使用輸入中包含的字符串來創建自己的文化嗎?這對我來說沒有意義。也許你想檢查輸入字符串是否匹配文化resp。在文化中是否有效?那麼你應該更深入的瞭解TryParse

只是另一個提示:小心不要混合分析與輸出格式化!改變完整線程的文化在這個情景中也不是很有用:-)。

0

我認爲這個片段可以讓你以正確的方式。

CultureInfo cultureCA = CultureInfo.CreateSpecificCulture("fr-CA"); 
NumberFormatInfo numberFormat = cultureCA.NumberFormat; 

numberFormat.CurrencyGroupSeparator = "."; 
numberFormat.CurrencyDecimalSeparator = ","; 
Thread.CurrentThread.CurrentCulture = cultureCA; 
decimal num = Decimal.Parse("2,00$", System.Globalization.NumberStyles.Currency 
        | System.Globalization.NumberStyles.Number); 

Console.WriteLine(num == 2M); 
// true, num is 2 

num = Decimal.Parse("2.00$", System.Globalization.NumberStyles.Currency 
        | System.Globalization.NumberStyles.Number); 
Console.WriteLine(num == 200M); 
// true, num is 200