格式化要转换为Double的字符串

时间:2011-08-17 05:43:12

标签: c# string type-conversion

我正在尝试将string转换为double。传入的字符串总是一个整数......没有小数。所以,例如“90”。

double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger));

SomePercentTrigger是我要转换的百分比。

我收到“字符串格式不正确”错误,所以我应该如何格式化这个字符串?我必须格式化它,因为如果我不这样做,我在转换过程中会得到同样的错误:

double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger);

更新:

SomePercentTrigger只是一个string,例如“80”..它也总是一个整数。

3 个答案:

答案 0 :(得分:5)

<强>更新
你的字符串是"52.0"

必须是导致'.'的{​​{1}} 您可能在FormatException 设置为小数点的计算机上(例如,我居住在德国并使用德语区域设置。我们的小数点为'.'

要解决此问题,您需要使用','解析字符串。

CultureInfo.InvariantCulture

var value = double.Parse(myString, CultureInfo.InvariantCulture); 应该用于围绕数据存储的应用程序部分。将双精度转换为字符串InvariantCulture

时,请务必使用它

我怀疑Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));中有一些无效字符(数字以外的字符,'。'和可选的前导' - '),例如“80%”

所以你在这一行得到SomeEntity.KeyIDs.SomePercentTrigger

FormatException

因为double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger)); 格式规则仅对数值有效。

此外,你也得到了同样的例外:

{0:0.00}

因为“80%”无法转换为双倍。

你应该

  • 将一些日志记录放在失败的语句前面
  • 或调试该代码

并查看double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger); 实际内容是什么。

答案 1 :(得分:2)

使用double.Parse(string)double.TryParse(string, out value)

答案 2 :(得分:2)

尝试格式化字符串没有意义。您必须先将其解析为数字才能格式化。无论如何,将没有小数的数字解析为double是没有问题的,所以字符串可能不包含你认为它的作用。

如果字符串包含整数格式的数字,则将字符串解析为整数,然后将整数转换为double:

double percentToCheck = (double)Int32.Parse(SomeEntity.KeyIDs.SomePercentTrigger);