我正在尝试将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”..它也总是一个整数。
答案 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);