有没有一种快速的方法将指数表示法中的数字(例如:"0.5e10"或"-5e20")转换为十进制或双精度?
更新:我找到了从指数表示法中解析数字,但这些示例对我来说无法工作,除非我指定了一个区域设置。
解决方案:
double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);
有没有一种快速的方法将指数表示法中的数字(例如:"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.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文章“解析数字字符串”以获取更多信息。只要对Parse
方法指定了NumberStyles.AllowExponent
选项(默认适用于double
),解析此类字符串就会正常工作。
NB:正如提问者所指出的,“e10”这样的指数表示法并不适用于所有文化。然而,指定 en-US 文化确保它可以正常工作。我猜 CultureInfo.InvariantCulture
也应该可以做到这一点。
decimal.Parse
,你需要显式指定 NumberStyles。 - NoldorinNumberStyles.AllowExponent
。 - Noldorin@Noldorin是正确的,请尝试以下代码:
string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);
Math.Round 函数非常好用,可以对数字进行渲染以去除多余的小数位,以下是使用方法:
Math.Round(Double.Parse("3,55E-15"),2)