17

有没有一种快速的方法可以将带有指数符号的数字(例如:“0.5e10”或“-5e20”)转换为十进制或双精度数?

更新:我发现Parse a Number from Exponential Notation但这些示例对我不起作用,除非我指定了一种文化。

解决方案:

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.Parsedecimal.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 文章Parsing Numeric Strings。只要为方法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 回答