web-dev-qa-db-ja.com

指数表記の数値を文字列から2進数または10進数に変換します

指数表記(例:「0.5e10」または「-5e20」)の数値を10進数または倍精度に変換する高速な方法はありますか?

更新:私は 指数表記から数値を解析する を見つけましたが、カルチャを指定しない限り、例は機能しません。

解決:

double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);
14
OMGKurtNilsen

カルチャで小数点記号として_._を使用している場合は、double.Parse("1.50E-15")だけが機能するはずです。

カルチャが他のもの(例:_,_)を使用している場合、またはアプリケーションがすべてのコンピューターで同じように機能することを確認したい場合は、 InvariantCulture を使用する必要があります。

_double.Parse("1.50E-15", CultureInfo.InvariantCulture)
_
16
svick

標準 - double.Parse または decimal.Parse メソッドはここで仕事をします。

例:

// AllowExponent is implicit
var number1 = double.Parse("0.5e10");
Debug.Assert(number1 == 5000000000.0);

// AllowExponent must be given explicitly
var number2 = decimal.Parse("0.5e10", NumberStyles.AllowExponent);
Debug.Assert(number2 == 5000000000m);

また、詳細については、MSDNの記事 数値文字列の解析 を参照してください。 NumberStyles.AllowExponentオプションがParseメソッド(デフォルトではdoubleの場合)に指定されているため、このような文字列の解析は正常に機能します。

NB:質問者が指摘しているように、たとえば「e10」の指数表記はすべての文化で機能するとは限りません。ただし、en-USカルチャを指定すると、確実に機能します。 CultureInfo.InvariantCultureもトリックを行う必要があります。

6
Noldorin

@Noldorinは正しいですこのコードを試してください:

string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);
2
Kevin Holditch

Math.Round うまくいきます。数値が赤くなり、削除されます。使用方法は次のとおりです。

Math.Round(Double.Parse("3,55E-15"),2)
1
KARIM Yassine