【问题标题】:Double.TryParse() input decimal separator different than system decimal separatorDouble.TryParse() 输入小数点分隔符与系统小数点分隔符不同
【发布时间】:2023-03-21 08:40:01
【问题描述】:

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

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

我有哪些正确解析的选项?其中之一是将源代码中的点替换为String.Replace('.', ',') 的逗号,但我认为我不太喜欢这个。

【问题讨论】:

    标签: c# .net parsing double


    【解决方案1】:

    XML 标准明确规定了日期和数字等的格式。这有助于确保 XML 独立于平台且可互操作。看看使用 XmlConvert 处理 xml 数据。

    double value = XmlConvert.ToDouble(stringValue);
    

    【讨论】:

    • 这是一个很好的建议,因为许多人不知道 XmlConvert 类。这在使用 DateTime 值时尤其重要。
    • 是的,我也不知道这个。谢谢!
    • @Chris 它给出了输入字符串格式不正确的错误。我们如何保持 , 作为分隔符?
    【解决方案2】:

    这样就可以了:

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

    【讨论】:

    • 你应该描述一下它是如何工作的以及为什么工作。
    【解决方案3】:

    double.TryParse 具有采用 IFormatProvider 的重载。使用对应的 CultureInfo,在您的情况下可以使用 CultureInfo.InvariantCulture。

    【讨论】:

    • 对于我们懒惰的人来说,一个例子会很受欢迎。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多