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

时间:2011-10-24 15:15:01

标签: c# .net exponent

是否有快速方法将指数表示法(例如:“0.5e10”或“-5e20”)转换为十进制或双倍?

更新:我找到了Parse a Number from Exponential Notation,但除非我指定了文化,否则这些示例对我不起作用。

解决方案:

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

4 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:6)

标准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),解析此类字符串就可以正常工作。

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

答案 2 :(得分:2)

@Noldorin是正确的尝试此代码:

string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);

答案 3 :(得分:1)

Math.Round做得很好,它会重新编号以便删除,以下是如何使用它:

Math.Round(Double.Parse("3,55E-15"),2)