代码之家  ›  专栏  ›  技术社区  ›  mare

double.typarse()输入十进制分隔符不同于系统十进制分隔符

  •  10
  • mare  · 技术社区  · 14 年前

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

    结果,0.7的值被解析为 Double.TryParse Double.Parse 为7000000。

    我的正确解析选项是什么?其中之一是用逗号替换源中的点 String.Replace('.', ',') 但我觉得我不太喜欢这个。

    4 回复  |  直到 9 年前
        1
  •  22
  •   Chris Taylor    14 年前

    XML标准明确了日期和数字等的格式,这有助于确保XML独立于平台且可互操作。看看用什么 XmlConvert 对于XML数据。

    double value = XmlConvert.ToDouble(stringValue);
    
        2
  •  16
  •   asgerhallas    14 年前

    这样做的目的是:

        string test = "0.7";
        Assert.Equal(0.7, Double.Parse(test, NumberStyles.Float, CultureInfo.InvariantCulture));
    
        3
  •  12
  •   Femaref    14 年前

    double.TryParse 具有采用iformatProvider的重载。使用共同响应的CultureInfo,在您的情况下可以使用CultureInfo.InvariantCulture。

        4
  •  7
  •   Bartosz Pierzchlewicz    11 年前

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

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