Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将具有指数表示法的数字从字符串转换为双精度或十进制_C#_.net_Exponent - Fatal编程技术网

C# 将具有指数表示法的数字从字符串转换为双精度或十进制

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.

有没有一种快速方法可以将指数表示法(例如:“0.5e10”或“-5e20”)的数字转换为十进制或双精度

更新:我找到了,但除非我指定了区域性,否则这些示例对我不起作用

解决方案:

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)