指数表記(例:「0.5e10」または「-5e20」)の数値を10進数または倍精度に変換する高速な方法はありますか?
更新:私は 指数表記から数値を解析する を見つけましたが、カルチャを指定しない限り、例は機能しません。
解決:
double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);
カルチャで小数点記号として_.
_を使用している場合は、double.Parse("1.50E-15")
だけが機能するはずです。
カルチャが他のもの(例:_,
_)を使用している場合、またはアプリケーションがすべてのコンピューターで同じように機能することを確認したい場合は、 InvariantCulture
を使用する必要があります。
_double.Parse("1.50E-15", CultureInfo.InvariantCulture)
_
標準 - 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
もトリックを行う必要があります。
@Noldorinは正しいですこのコードを試してください:
string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);
Math.Round うまくいきます。数値が赤くなり、削除されます。使用方法は次のとおりです。
Math.Round(Double.Parse("3,55E-15"),2)