屏幕截图总结了问题:
我无法控制检索到的值。它带有一些我无法弄清楚的时髦格式,即使看起来完全正常,解析也会失败。手动输入值可以正常工作。
我怎样才能"正常化"检索到的值,Decimal.Parse
不会失败?
作为参考,这里是失败的字符串(复制和粘贴):
" 10.00"
答案 0 :(得分:6)
首先,我会检查您的区域设置,以消除任何简单的预期小数分隔符差异。
如果它绘制一个空白,那么如果字符串10.00
成功解析,那么看起来的字符串如10.00
但无法解析的字符串实际上
10.00
。
检查并确定字符串中每个字符的字符代码,并确认它确实是10.00
,而不是具有相同外观但实际上不同的某些外来Unicode(可能还包括不是甚至可以在显示时看到。)
答案 1 :(得分:1)
您可能会在要检索的字符串中隐藏某种特殊字符。
试试这个:
Double.Parse(Regex.Replace(decimalValue, @"[^0-9.,]+", ""))
您可能需要为System.Text.RegularExpressions
答案 2 :(得分:0)
我只会替换一个有问题的角色,这是最安全的选择:
s = s.Replace("\u200E", "");
答案 3 :(得分:-1)
正如Jeroen Mostert在评论中提到的,decimalValue
中有一个非打印字符。
这是一个类似的问题,可以帮助你解决这个问题。
https://stackoverflow.com/a/15259355/7636764
编辑:
使用解决方案的string output = new string(input.Where(c => char.IsLetter(c) || char.IsDigit(c)).ToArray());
部分,但在IsDigit之后也包含在|| char.IsPunctuation(c)
中将获得您想要的结果。