是否有快速方法将指数表示法(例如:“0.5e10”或“-5e20”)转换为十进制或双倍?
更新:我找到了Parse a Number from Exponential Notation,但除非我指定了文化,否则这些示例对我不起作用。
解决方案:
double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);
答案 0 :(得分:15)
如果您的文化使用.
作为小数点分隔符,则只需double.Parse("1.50E-15")
即可。
如果您的文化使用了其他内容(例如,
),或者您希望确保您的应用在每台计算机上的工作方式相同,则应使用InvariantCulture
:
double.Parse("1.50E-15", CultureInfo.InvariantCulture)
答案 1 :(得分: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);
另外,有关详细信息,请参阅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)