指数表記(例:「0.5e10」または「-5e20」)の数値を10進数または2進数に変換する高速な方法はありますか?
更新:指数表記から数値を解析することがわかりましたが、カルチャを指定しない限り、例は機能しません。
解決:
double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);
指数表記(例:「0.5e10」または「-5e20」)の数値を10進数または2進数に変換する高速な方法はありますか?
更新:指数表記から数値を解析することがわかりましたが、カルチャを指定しない限り、例は機能しません。
解決:
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
)、そのような文字列の解析は正常に機能します。
注意:質問者が指摘しているように、たとえば「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)