2012-06-26 18 views
64

"41.00027357629127"のような文字列を変換しています。文字列をCで浮動小数点数に変換する

Convert.ToSingle("41.00027357629127"); 

又は

float.Parse("41.00027357629127"); 

これらの方法は、4.10002732E + 15を返します。

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

+1

どのように変換されているのか分かりますか?つまり、番号を表示しています。 – Mark

+0

ToSingleはなぜですか?そしてToFloatではない? – R2D2

答えて

142

スレッドのロケールは、 "。"の代わりに小数点が "、"に設定されています。フロートは精度の桁数を保持することができないことが

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

注、:

はこれを使用してみてください。これを行うには、doubleまたはDecimalを使用する必要があります。

+16

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

1

することはできdouble.Parse("41.00027357629127");

+0

私は彼がそれを丸める方法を尋ねているとは思わない。 –

+0

ı疲れましたıdidnt – Mehmet

4

floatの精度は7桁です。全体をたくさん保つには、doubleタイプを15〜16桁の数字で使用する必要があります。フォーマットについては、formatting doublesについての投稿を見てください。そして、あなたはabout decimal separators in C#を心配する必要があります。

+0

ı疲れたdouble.Parseそれは4100027357629127.0を返しますそれはあまりにも悪い – Mehmet

+1

これは 'のように聞こえる。文字はロケールの小数点区切り記号ではありませんか? http://stackoverflow.com/questions/3870154/c-sharp-decimal-separator – jpe

7

使用Convert.ToDouble("41.00027357629127");

Convert.ToDouble documentation

+1

これはデータ型をfloatからdoubleに変更しませんか? OPは浮動小数点が必要でした。 –

18

はまず、それはあなたがデバッガで見float数のちょうどプレゼンテーションです。 実際のの値はほぼ正確です(可能な限り)。

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

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

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

+0

私はどのように私のCultureInfoを選ぶことができますか?私はıがTR-TRを追加する七面鳥にいますか? – Mehmet

+1

@Mehmet 'new System.Globalization.CultureInfo(" tr-TR ")' – sshow

0

より正確な値を得るために、floatの代わりにdoubleを使用して解析することができます。

7

"float asd = (float) Convert.ToDouble("41.00027357629127");を使用できます。

+3

これがなぜ正しい答え。 –

関連する問題