【发布时间】:2023-03-21 08:40:01
【问题描述】:
我有一个使用点 (".") 作为小数分隔符的源 XML,我正在使用逗号 (",") 作为小数分隔符的系统上对其进行解析。
因此,0.7 的值被解析为 Double.TryParse 或 Double.Parse 为 7000000。
我有哪些正确解析的选项?其中之一是将源代码中的点替换为String.Replace('.', ',') 的逗号,但我认为我不太喜欢这个。
【问题讨论】:
我有一个使用点 (".") 作为小数分隔符的源 XML,我正在使用逗号 (",") 作为小数分隔符的系统上对其进行解析。
因此,0.7 的值被解析为 Double.TryParse 或 Double.Parse 为 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);
【讨论】: