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

OMG*_*sen 14 .net c# exponent

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

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

解:

double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

svi*_*ick 17

如果你的文化.用作小数分隔符,那就double.Parse("1.50E-15")应该工作了.

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

double.Parse("1.50E-15", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

  • 是的,我注意到了.下次,您应该将解决方案作为答案发布,而不是编辑问题. (5认同)

Nol*_*rin 6

一个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);
Run Code Online (Sandbox Code Playgroud)

另请参阅MSDN文章Parsing Numeric Strings以获取更多信息.只要为方法NumberStyles.AllowExponent指定了选项Parse(默认情况下是这样double),解析这样的字符串就可以了.

注意:正如提问者指出的那样,例如"e10"的指数符号在所有文化中都不起作用.然而,指定en-US文化可确保其有效.我怀疑CultureInfo.InvariantCulture也应该这样做.