格式化要转换为Double的字符串
本文关键字:字符串 Double 转换 格式化 | 更新日期: 2023-09-27 18:05:54
我正在尝试将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"..它总是一个整数
更新:
您的字符串是"52.0"
。
必须是引起FormatException
的'.'
。
您可能在一台机器上,'.'
是而不是设置为小数点(例如,我住在德国并使用德国区域设置)。小数点是','
)
要解决这个问题,您需要使用CultureInfo.InvariantCulture
解析字符串。
var value = double.Parse(myString, CultureInfo.InvariantCulture);
InvariantCulture
应该用于应用程序中与数据存储相关的部分。确保在将双精度转换为字符串时也使用它Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
我怀疑SomeEntity.KeyIDs.SomePercentTrigger
中有一些无效字符(除了数字,'。'和可选的前导'-'),例如"80%"
所以这一行是FormatException
double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger));
,因为{0:0.00}
格式规则只对数值有效。
这里也会出现同样的异常:
double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger);
,因为"80%"不能转换成double类型。
你应该
- 在失败语句前面添加一些日志记录
- 或调试该代码
查看SomeEntity.KeyIDs.SomePercentTrigger
的实际内容是什么
使用double.Parse(string)
或double.TryParse(string, out value)
尝试格式化字符串是没有意义的。您必须首先将其解析为数字才能格式化它。无论如何,将没有小数的数字解析为双精度数是没有问题的,因此字符串可能不包含您认为它包含的内容。
如果字符串包含整数格式的数字,则将该字符串解析为整数,然后将其转换为双精度类型:
double percentToCheck = (double)Int32.Parse(SomeEntity.KeyIDs.SomePercentTrigger);