C#で文字列を浮動小数点数に変換する


108

「41.00027357629127」のような文字列を変換していて、使用しています。

Convert.ToSingle("41.00027357629127");

または

float.Parse("41.00027357629127");

これらのメソッドは4.10002732E + 15を返します。

フロートに変換すると、「41.00027357629127」が必要になります。この文字列は同じでなければなりません...


1
どのように変換されたのかを知る方法-つまり、数値を表示する方法
mmmmmm

1
なぜそのToSingleなのか?そして、ToFloatではありませんか?
ロードダースベイダー

41.00027357629127は科学表記法で4.10002732E + 15にしないでください。もちろん、文化では小数点(および千の区切り記号としてドット)の代わりに小数点コンマを使用しているため、数値は実際に次のようになります。4100027357629127は、結果として4.10002732E + 15
ljgww

回答:


229

スレッドのロケールは、小数点が「。」ではなく「、」に設定されています。

これを使ってみてください:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

ただし、浮動小数点はその桁数の精度を保持できないことに注意してください。そのためには、doubleまたはDecimalを使用する必要があります。


35
using System.Globalization;アクセスする名前空間を追加することを忘れないでくださいCultureInfo
Mobiletainment

24

1つ目は、デバッガに表示される数値の提示にすぎfloatません。リアル値は約正確な(それが可能だと同じくらい)です。

注:浮動小数点数と文字列を扱う場合は、常に CultureInfo情報を使用してください。

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

これは単なる例です。あなたのケースに適切な文化を選択してください。


どうすれば私のCultureInfoを選択できますか?私はトルコにいますが、TR-TRを追加しますか?
Mehmet

1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow

20

次のものを使用できます。

float asd = (float) Convert.ToDouble("41.00027357629127");

4
これが正しい答えである理由について、いくつかのコンテキストを提供してください。
Bas Peeters 2014年


4

floatの精度は7桁です。全数を保持したい場合は、15から16桁を保持するdoubleタイプを使用する必要があります。フォーマットについては、ダブルスのフォーマットに関する投稿をご覧ください。また、C#での小数点記号についても考慮する必要があります。


ı疲れています。解析すると、4100027357629127.0が返されます。あまりにも悪い
Mehmet

2
これは「。」のように聞こえます 文字はあなたのロケールの小数点記号ではありませんか?stackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe


-2

より精度の高い値を取得するには、floatではなくdoubleを使用した解析を使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.