有没有一种快速的方法可以将带有指数符号的数字(例如:“0.5e10”或“-5e20”)转换为十进制或双精度数?
更新:我发现Parse a Number from Exponential Notation但这些示例对我不起作用,除非我指定了一种文化。
解决方案:
double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);
有没有一种快速的方法可以将带有指数符号的数字(例如:“0.5e10”或“-5e20”)转换为十进制或双精度数?
更新:我发现Parse a Number from Exponential Notation但这些示例对我不起作用,除非我指定了一种文化。
解决方案:
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 文章Parsing Numeric Strings。只要为方法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)