将带有指数表示法的数字从字符串转换为double或decimal

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

更新:我发现从指数表示法解析数字,但除非我指定了一种文化,否则这些例子对我不起作用。

解:

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

如果您的文化使用. 作为小数分隔符,只需double.Parse("1.50E-15")可以了。

如果您的文化使用其他内容(例如),或者您希望确保您的应用程序在每台计算机上的工作方式相同,则应使用InvariantCulture

 double.Parse("1.50E-15", CultureInfo.InvariantCulture) 

标准的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以获取更多信息。 只要为Parse方法指定NumberStyles.AllowExponent选项(默认情况下为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)