【问题标题】:Double.Parse on a german system result in comma instead of decimal point德语系统上的 Double.Parse 导致逗号而不是小数点
【发布时间】:2013-05-16 21:20:03
【问题描述】:

我有以下几点:

 private static string someValue = "0.1";

我需要将其转换为双精度才能进行一些计算。 在德国系统上,我得到的转换为 0,1 而不是 0.1,我需要它为 0.1。 我尝试了以下方法:

double d = Convert.ToDouble(s_valueDeadband10Percent, CultureInfo.InvariantCulture.NumberFormat); // still getting 0,1

double d = Convert.ToDouble(s_valueDeadband10Percent, CultureInfo.InvariantCulture); // still getting 0,1

有什么想法吗?

【问题讨论】:

  • 当字段实际上是someValue 时,为什么要转换s_valueDeadband10Percent?您的标题还显示Double.Parse 和您的代码Convert.ToDouble。请更彻底。

标签: c# globalization


【解决方案1】:

在德国系统上,我得到的转换为 0,1 而不是 0.1,我需要它为 0.1。

不,你没有得到其中任何一个。你会得到一个double 值,大约是十分之一。 double 值根本不是文本“事物”。它可以转换为文本,但这是不同的操作。如果您真的想要一个文本值,您需要找到该操作的位置,并将 that 更改为使用 CultureInfo.InvariantCulture。但是,如果您可以完全不转换回字符串,那就更好了。

当然,如果可能,您应该将静态变量更改为 double 开头:

private static double someValue = 0.1;

这样你也可以避免解析。

【讨论】:

  • 这似乎也是一个调试器/视觉工作室显示问题,因为 OP 将字符串转换为双精度,他抱怨双精度显示 0,1 而不是 0.1
  • @TimSchmelter:是的,这就是我所说的“它可以转换为文本,但这是一个不同的操作。您需要找到该操作的位置,并将其更改为使用 CultureInfo.InvariantCulture,如果你真的想要一个文本值。”我们不知道 在哪里 OP 将值转换回文本。
【解决方案2】:

我认为您将双精度的字符串表示与实际值混淆了。

您的代码应该很好地将字符串“0.1”转换为 0.1d。每当您打印它(在调试器、控制台或网页上)时,都需要将其转换回字符串,这可能在您的情况下隐式发生。 double 只是一些浮点位,它本身没有定义它的打印表示。

如果在德国文化中完成从双精度到字符串的转换,您将看到“0,1”。

试试打印这个

d.ToString(CultureInfo.InvariantCulture)

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2023-03-23
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    相关资源
    最近更新 更多