17

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

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

解決:

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

4 に答える 4

21

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

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

double.Parse("1.50E-15", CultureInfo.InvariantCulture)
于 2011-10-24T15:36:59.300 に答える
8

標準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もそのトリックを行うべきだと思います。

于 2011-10-24T15:20:13.260 に答える
2

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

string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);
于 2011-10-24T15:25:49.183 に答える
1

Math.Roundはそれをうまく行い、数値を赤くして削除します。使用方法は次のとおりです。

Math.Round(Double.Parse("3,55E-15"),2)
于 2016-02-23T17:51:02.753 に答える