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

时间:2010-05-16 17:57:47

标签: c# .net parsing double

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

因此,值为0.7会被Double.TryParseDouble.Parse解析为7000000。

我有什么选择正确解析?其中一个是用逗号String.Replace('.', ',')替换源中的点,但我不认为我非常喜欢这个。

4 个答案:

答案 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);