2

重複
の可能性:文字列からdouble値を読み取る

文字列をdoubleに変換する際に問題が発生し、常に奇妙な結果が得られます。次の文字列を変換したい:

 string Test = "17828.571428571";

私はこのように試しました(通常は機能するため):

Double _Test = Convert.ToDouble(Test);

結果は:17828571428571(ドットなし、笑)

後でMath.Round()に対してdoubleとして必要になるので、この例では17828を使用しています。私の2番目のアイデアは文字列を分割することでしたが、それは本当に最良の方法ですか?:S

私を助けてくれてありがとう!

フィン

4

3 に答える 3

9

使用するInvariantCulture

Double _Test = Convert.ToDouble(Test,CultureInfo.InvariantCulture);

編集:あなたの現在の文化は、浮動小数点de-DEを使用する「ドイツ語」だと思います。,

次のコードを試しました。NumberFormatInfo.InvariantInfo変換中に使用することもできます。

string Test = "17828.571428571";
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
double d = Convert.ToDouble(Test);
double d2 = Convert.ToDouble(Test, CultureInfo.InvariantCulture);
double d3 =  Convert.ToDouble(Test, NumberFormatInfo.InvariantInfo);

string Test2 = "17828,571428571"; //Notice the comma in the string
double d4 = Convert.ToDouble(Test2);
Console.WriteLine("Using comma as decimal point: "+ d4);

出力:(出力のコンマに注意してください)

Wihtout Invariant: 17828571428571
With InvariantCulture: 17828,571428571
With NumberFormatInfo.InvariantInfo: 17828,571428571
Using comma as decimal point: 17828,571428571
于 2012-08-27T06:24:38.970 に答える
4

試してみるDouble.TryParseDouble.Parse、正しい形式があると確信している場合

編集:しかし、フォーマットに注意してください。たとえば、ドイツ人の場合、140.50は14050になるため、140.50ではなく140,50と入力する必要があります。または、文化を気にしないパラメータとして渡します(他の投稿を参照)。

于 2012-08-27T06:24:11.913 に答える
4
double _Test = double.Parse(Test,CultureInfo.InvariantCulture);

変換操作の形式プロバイダーを不変に設定する必要があります。

于 2012-08-27T06:25:18.997 に答える