如何将字符串解析为双精度浮点数

3

这是我的字符串

  20.0e-6

我正在解析它,像这样:
String Ans=Double.Parse("20.0e-6")

现在我得到的结果是2E-05,但需要的输出应该是0.00002

如何实现?


是的...你说得对。但我需要一个字符串 0.00002 而不是 2E-05 - Thorin Oakenshield
这是合法的C#代码还是VB代码? - BoltClock
为什么不行呢?字符串可以大写,变量名也可以。 - Migwell
@Miguel:谢谢提醒,我忘记了在 C# 中 string 和 String 是相同的。 - BoltClock
1
你的问题与将字符串解析为双精度浮点数无关,而是与将双精度浮点数转换为字符串有关。 - CodesInChaos
3个回答

10
Double.Parse的结果是一个Double,而不是一个字符串。您需要从Double中输出一个字符串,使用ToString
您还应该使用一个重载Double.Parse方法,其中包含一个NumberStyles参数。使用Float值允许指数符号表示法:
string Ans=Double.Parse("20.0e-6", NumberStyles.Float).ToString("0.#####");

如果你不想冒异常风险(例如 InvalidCastException),可以使用 TryParse

Double res;
if (Double.TryParse("20.0e-6", NumberStyles.Float, 
                    CultureInfo.InvariantCulture ,res))
{
  string Ans = res.ToString("0.#####");
}

无法隐式地将类型 'double' 转换为 'string'。 String Ans=Double.Parse("20.0e-6", NumberStyles.Float).ToString() 会得到相同的结果。 - Thorin Oakenshield
3
我建议使用Double的TryParse方法(这是最佳实践)。 - Phil C
@Pramodh - 当然可以。您正在尝试将字符串转换为Double,然后将结果重新分配给字符串。至于ToString的错误-您需要为其提供格式字符串才能正确转换。答案已更新。 - Oded

2

是的,它肯定会崩溃。实际上,最好使用TryParse并应用String.Format("{0:0.0####", myDouble)。我只是想说明使用ToString格式化数字的用法。 - Tom

1

获得您想要的结果的一种方法是使用以下方式的String.Format

double x = 20.0e-6;

string y = string.Format("{0:0.######}",x);

Console.WriteLine(y);

根据您的示例,这将输出值0.00002

编辑

我刚意识到这实际上是与您的问题相反的,因此为了保持答案的有用性,我将添加以下内容:

给定一个字符串,您可以将其解析为double,然后应用与上述相同的逻辑。可能不是最优雅的解决方案,但它提供了另一种获得所需结果的方法。

string x = "20.0e-6";

var y = double.Parse(p);

Console.WriteLine(String.Format("{0:0.######}",y));

如果我的源字符串中有拼写错误怎么办?例如20.0f-06.....我始终建议使用double.TryParse.... - marc_s
1
同意。我保持简单,假设编码人员已经遵循了良好的实践。 - Jamie Dixon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接