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

mar*_*are 10 .net c# double parsing

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

其结果是,值0.7获取与解析Double.TryParseDouble.Parse为7000000.

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

Chr*_*lor 22

XML标准明确指出日期和数字等的格式.这有助于确保XML独立于平台并可互操作.看一下使用XmlConvert获取xml数据.

double value = XmlConvert.ToDouble(stringValue);
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的建议,因为很多人都不知道XmlConvert类.在使用DateTime值时,这一点尤为重要. (3认同)

asg*_*las 17

这样做的工作:

    string test = "0.7";
    Assert.Equal(0.7, Double.Parse(test, NumberStyles.Float, CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)


Fem*_*ref 12

double.TryParse使用IFormatProvider时出现过载.使用相应的CultureInfo,在您的情况下可以使用CultureInfo.InvariantCulture.

  • 对于我们懒惰的类型,一个例子是值得赞赏的. (6认同)

Bar*_*icz 8

指定自定义小数分隔符的简便方法:

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