2011-02-07 28 views
3

私はデスクトップスタジオ2008を使用しています。私のデスクトップアプリケーションは異なる地域設定で動作します。私のコードで英語で10進数をスペイン語10進数に変換する方法、グローバル化を使用してC#

、私は英語の形式の文字列変数の小数点以下の数字を持って、私は「スペイン語(エクアドル)などの地域設定でConvert.ToDecimal()を使用して変数10進数に変換したい

私が行うときは、次の。

私は、

Convert.ToDecimal(myNum, new CultureInfo("en-US")); // i got 0.04, but i want 0,04 

を使用したとき、私はCを使用しているだって私は、すべての文のための新しいCultureInfo("en-Us")を追加カント

string myNum = "0.04"; 
decimal myDec = Convert.ToDecimal(myNum); // here im getting 4 instead of 0,04 

100回以上の矛盾の文。

これをどのように達成するのですか?助けてください??

答えて

2

よりもむしろたびに新しい文化を作る、CultureInfo.InvariantCultureを使用する方が良いだろう - と私は個人的にというよりも、Convert.ToDecimaldecimal.Parseまたはdecimal.TryParseを使用します。しかし私の個人的な好みだけ。 IIRCでは、null入力を処理する点で実際に違いがあります。

しかし、毎回そのコードにコードを含めることに反対するのであれば、最も簡単な解決方法は独自のヘルパーメソッドを作成し、というコードをと呼ぶことです。たとえば:余談として

public static decimal ParseDecimalInvariant(string text) 
{ 
    return decimal.Parse(text, CultureInfo.InvariantCulture); 
} 

は、私はあなたがが本当には、あなたのコード内の文字列値を持っていないことを望みます。数字を表す文字列を持っている場合は、代わりにリテラルに変更してください!

実行時に解析するよりもはるかに優れてい
decimal myNum = 0.04m; 

:)

+0

私はあなたのコードに従いました。それは正常に動作していますが、場合によっては、スペイン語(エクアドル)のような地域設定では、私が渡すと、decimal.Parse( "10,50"、CultureInfo.InvariantCulture); 1050を取得しています。なぜこれがそうですか? – Harsha

1

私はここで、正しい答えはコードの変更を伴うために起こっていると考えています。あなたはアプリのカルチャーを変更することができますが、ユーザーの嗜好をオーバーライドして表示するなど、IMOは正しくありません。

通常、必要なカルチャコードを静的フィールドに使用し、そのカルチャをシステム文字列リテラルを解釈するコードのすべてのビットに対して。あなたのケースでは、コードリテラルは英語の形式であるため、毎回CultureInfo.InvariantCultureを渡して少しの労力を節約することができます。

はい、100回のコード変更です。率直に言って、タフです。

関連する問題