1

アプリケーションで次のコードを使用しようとしていますが、フランス語の OS でのみ例外がスローされます。この問題を解決するのを手伝ってくれませんか。

using System.Globalization;
using System.Threading;

....
CultureInfo pro = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name);
SqlCmd.Parameters[Dat.ColumnName].Value = Convert.ToDecimal("0.000001",pro);
4

3 に答える 3

6

これはフランス語では有効な小数ではありません。フランス語では、小数点記号はコンマです。

文字列の小数点記号が常にピリオドである場合、現在のカルチャを使用しても意味がありません。インバリアント カルチャを使用することをお勧めします。

Convert.ToDecimal("0.000001", CultureInfo.InvariantCulture);

別のメモで:

C#usingはディレクティブを認識しているため、すべての型を完全に修飾する必要はありません。

を記述する代わりに、C# ファイルの先頭にSystem.Globalization.CultureInfo置いて、コードで使用することができます。 これにより、コードがはるかに読みやすくなります。using System.Globalization;CultureInfo

于 2012-10-05T07:42:59.313 に答える
0

これは、文化が 10 進数を指定する方法に関係しています。英語 (および .net のインバリアント カルチャ) では、小数点記号はドット文字 "." ですが、フランス語 (およびほとんどのヨーロッパのカルチャ) では、コンマ "," が小数点記号です。

using System.Globalization;
...

decimal d = Convert.ToDecimal("0.000001",CultureInfo.InvariantCulture);
//outputs 0.000001
Console.WriteLine(d); 

CultureInfo french = new CultureInfo("fr");
d = Convert.ToDecimal("0,000001",french);
//outputs 0.000001
Console.WriteLine(d); 

d = Convert.ToDecimal("0.000001",french);
//Throws an "Input string was not in a correct format" exception
//because a . is not a valid character in a decimal, according to french culture

UI を介してユーザーから値を取得する場合、ユーザーがデータを入力しているカルチャに特に注意する必要があります。千。

于 2012-10-05T07:56:15.733 に答える
0

フランス文化では、小数はドットではなくコンマを使用します。(例: 0,000001)

フランスのカルチャで 0.00001 を解析する場合CultureInfo.InvariantCultureは、コンマの代わりにドットを処理するために指定します

于 2012-10-05T07:44:02.603 に答える