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