C# 将具有指数表示法的数字从字符串转换为双精度或十进制
有没有一种快速方法可以将指数表示法(例如:“0.5e10”或“-5e20”)的数字转换为十进制或双精度 更新:我找到了,但除非我指定了区域性,否则这些示例对我不起作用 解决方案:C# 将具有指数表示法的数字从字符串转换为双精度或十进制,c#,.net,exponent,C#,.net,Exponent,有没有一种快速方法可以将指数表示法(例如:“0.5e10”或“-5e20”)的数字转换为十进制或双精度 更新:我找到了,但除非我指定了区域性,否则这些示例对我不起作用 解决方案: double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture); 标准或方法在这里起作用 示例: // AllowExponent is implicit var number1 = double.Parse("0.5e10"); Debug.
double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);
标准或方法在这里起作用
示例:
// 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文章。只要将NumberStyles.AllowExponent
选项指定给Parse
方法(默认情况下为double
),解析这些字符串就可以正常工作
NB:正如提问者所指出的,例如“e10”的指数表示法并不适用于所有文化。但是,指定en-US文化可确保其有效。我怀疑
CultureInfo.InvariantCulture
也应该起作用。@Noldorin是正确的,请尝试以下代码:
string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);
如果您的区域性使用
作为小数分隔符,则只需double.Parse(“1.50E-15”)
即可
如果您的区域性使用了其他内容(例如,
),或者您希望确保您的应用程序在每台计算机上的工作方式相同,则应使用:
如果做得好,它将重新编码编号,以便删除,下面是如何使用它:
Math.Round(Double.Parse("3,55E-15"),2)
您可以使用以下命令:@Ramhound:这是不理想的,原因有很多;更不用说是使用昂贵的浮点运算,不必要的卷积,并且是为更一般的x^y运算设计的,其中x和y都是实数。您尝试过double.TryParse和decimal.TryParse吗?@Dylan double test=double.Parse(“1.509e10”,NumberStyles.Float);//“输入字符串的格式不正确。”对于
decimal.Parse
,您需要显式指定NumberStyles。@OMGKurtNilsen:为什么要显式指定NumberStyles?没有必要。如果您坚持显式指定,请包括NumberStyles.AllowExponent
。我认为这不起作用,因为我的文化背景。当我指定“en-US”文化时,它起了作用。@omgkutnilsen:有道理。。。不变量文化可能也会起作用。谢谢您的确认。不过,这应该是一个注释,因为它只是重复了我所做的工作。:-)我知道我最初确实添加了注释,但后来意识到您不能在注释中添加代码块,不用担心。毕竟,请随意编辑我的答案(你的代表处有权限吗?)。如果没有,那么现在就有了这个例子。我们可能同时添加了它们。已经解决了这个问题,但这是第一个有效的答案。是的,我注意到了。下次,您应该将解决方案作为答案发布,而不是编辑问题。
Math.Round(Double.Parse("3,55E-15"),2)