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

13

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

结果是,值0.7被Double.TryParseDouble.Parse解析为7000000。

我有什么选择可以正确解析?其中之一是用String.Replace('.', ',')将源中的点替换为逗号,但我不太喜欢这个方法。

4个回答

26

XML标准明确规定了日期、数字等格式的格式化。这有助于确保XML在各个平台之间独立和互操作性。请查看使用XmlConvert处理XML数据。

double value = XmlConvert.ToDouble(stringValue);

4
这是一个很好的建议,因为许多人不知道 XmlConvert类。在使用DateTime值时,这尤其重要。 - Josh
1
是的,我也不知道这个。谢谢! - asgerhallas
@Chris 出现了“输入字符串的格式不正确”的错误。我们如何将逗号保留为分隔符? - VJOY

21

这个可以完成任务:

    string test = "0.7";
    Assert.Equal(0.7, Double.Parse(test, NumberStyles.Float, CultureInfo.InvariantCulture));

你应该简要描述一下这是如何以及为什么能够运作。 - Lii

11

指定自定义小数点的简便方法:

var price = "122$00";
var nfi = new NumberFormatInfo { CurrencyDecimalSeparator = "$" };
var ok = decimal.TryParse(price, NumberStyles.Currency, nfi, out result);

11

double.TryParse有一个重载函数,接受一个IFormatProvider类型的参数。在你的代码中应使用相应的CultureInfo,例如可以使用CultureInfo.InvariantCulture。


8
给我们这些懒人一个例子会更好。 - Fueled

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接