我有一个使用点(“。”)作为小数分隔符的源XML,我在使用逗号(“,”)作为小数分隔符的系统上解析它。
因此,值为0.7会被Double.TryParse
或Double.Parse
解析为7000000。
我有什么选择正确解析?其中一个是用逗号String.Replace('.', ',')
替换源中的点,但我不认为我非常喜欢这个。
答案 0 :(得分:22)
XML标准明确指出日期和数字等的格式。这有助于确保XML独立于平台并可互操作。看一下使用XmlConvert获取xml数据。
double value = XmlConvert.ToDouble(stringValue);
答案 1 :(得分:16)
这就是工作:
string test = "0.7";
Assert.Equal(0.7, Double.Parse(test, NumberStyles.Float, CultureInfo.InvariantCulture));
答案 2 :(得分:12)
double.TryParse
过载IFormatProvider。使用相应的CultureInfo,在您的情况下可以使用CultureInfo.InvariantCulture。
答案 3 :(得分:7)
指定自定义小数点分隔符的简便方法:
var price = "122$00";
var nfi = new NumberFormatInfo { CurrencyDecimalSeparator = "$" };
var ok = decimal.TryParse(price, NumberStyles.Currency, nfi, out result);