Double.TryParse()输入小数分隔符不同于系统小数分隔符

我有一个使用点(“。”)作为小数分隔符的源XML,我在使用逗号(“,”)作为小数分隔符的系统上解析它。

结果,使用Double.TryParseDouble.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);