【问题标题】:Convert ".1", ".2" to double [duplicate]将“.1”、“.2”转换为双倍[重复]
【发布时间】:2016-05-21 22:31:59
【问题描述】:

我想将".1"".2"等字符串转换为0.10.2等。

我试过了:

Convert.ToDouble(".1")

然后它崩溃了。我理解它为什么会崩溃,但我仍然需要将它转换为有效的双数。我知道我可以通过拆分字符串和解析来做到这一点,但是有更好的方法吗?

【问题讨论】:

  • 它不会“崩溃”,它会引发异常。您的语言环境是否使用逗号作为小数分隔符?
  • 它甚至不这样做,dotnetfiddle,你得到什么错误?这对我有用
  • @Sayse 我得到“System.FormatException”
  • 这是你的真实代码吗?
  • 您可以使用接受IFormatProvider 实例的ToDouble 方法来提供自定义格式。

标签: c# double


【解决方案1】:

Convert.ToDouble默认使用当前文化设置

您当前的文化可能与. 的字符串不同,为NumberDecimalSeparator

作为一种解决方案,您可以使用一种已经具有NumberDecimalSeparator 的文化,例如InvariantCulture,或者您可以使用Clone 您的CurrentCulture,将其设置为@987654332 @ 到. 并在您的Convert.ToDouble 方法(或double.Parse)中使用那个克隆的文化作为第二个参数。

var d = double.Parse(".1", CultureInfo.InvariantCulture);

var clone = (CultureInfo)CultureInfo.CurrentCulture.Clone();
clone.NumberFormat.NumberDecimalSeparator = ".";
var d = double.Parse(".1", clone);

【讨论】:

  • 每次也让我...
【解决方案2】:

试试这个:

  Double result = Double.Parse(".1", CultureInfo.InvariantCulture);

通过指定CultureInfo.InvariantCulture,您可以确保. 是小数分隔符。

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2021-07-14
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多