【问题标题】:string confused with a date. ToDouble issue in C#字符串与日期混淆。 C#中的ToDouble问题
【发布时间】:2014-05-19 13:21:44
【问题描述】:

我在 C# 中从字符串 ToDouble 进行了简单的转换,如图所示。 抛出的异常涉及日期时间转换,但字符串都不像日期,分配给的变量不是 DateTime 变量。有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 请将代码和异常发布为文本,而不是图片。

标签: c# string datetime double type-conversion


【解决方案1】:

转换取决于您的国家和文化设置。

如果您不在使用. 作为小数点的国家/地区,则应使用CultureInfo.InvariantCulture 作为转换的第二个参数。或者,您可以在您的本地文化中指定数字,但是当您将您的应用程序提供给在他的 PC 上使用另一种文化的人时,这很容易出现问题。

【讨论】:

    【解决方案2】:

    不确定为什么会出现错误...但是您是否尝试过类似的方法?如果是这样,它会给出同样的错误吗?

    即double.Parse 默认使用当前的文化。阅读of the answer posted by Mr Skeet in this SO post

    string sVal ="0.0005"; 
    double dVal = 0.0;
    
    if (double.TryParse(sVal, out dVal))
    {
        // Success !!
    }
    else
    {
        // Could not convert
    }
    

    【讨论】:

      【解决方案3】:

      System.Convert.ToDouble 将默认使用 double.Parse 与当前文化。如果您的小数分隔符不是.,您可能会遇到此异常。

      DateTime 具有误导性,因为智能感知只是试图帮助您。实际上它是一个数字而不是DateTime。所以这不是你的错,但 Visual-Studio 团队可以改进此消息。 FormatExceptionMessage 属性不包含 DateTime

      听起来你想要不变的文化:

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

      如果您不确定格式是否有效,您应该使用double.TryParse:

      double d;
      if (double.TryParse("0.0005", NumberStyles.Any, CultureInfo.InvariantCulture, out d))
      {
          Console.Write("Value is: " + d);
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-19
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        相关资源
        最近更新 更多