【发布时间】:2014-05-19 13:21:44
【问题描述】:
我在 C# 中从字符串 ToDouble 进行了简单的转换,如图所示。 抛出的异常涉及日期时间转换,但字符串都不像日期,分配给的变量不是 DateTime 变量。有人可以帮忙吗?
谢谢。
【问题讨论】:
-
请将代码和异常发布为文本,而不是图片。
标签: c# string datetime double type-conversion
我在 C# 中从字符串 ToDouble 进行了简单的转换,如图所示。 抛出的异常涉及日期时间转换,但字符串都不像日期,分配给的变量不是 DateTime 变量。有人可以帮忙吗?
谢谢。
【问题讨论】:
标签: c# string datetime double type-conversion
转换取决于您的国家和文化设置。
如果您不在使用. 作为小数点的国家/地区,则应使用CultureInfo.InvariantCulture 作为转换的第二个参数。或者,您可以在您的本地文化中指定数字,但是当您将您的应用程序提供给在他的 PC 上使用另一种文化的人时,这很容易出现问题。
【讨论】:
不确定为什么会出现错误...但是您是否尝试过类似的方法?如果是这样,它会给出同样的错误吗?
即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
}
【讨论】:
System.Convert.ToDouble 将默认使用 double.Parse 与当前文化。如果您的小数分隔符不是.,您可能会遇到此异常。
DateTime 具有误导性,因为智能感知只是试图帮助您。实际上它是一个数字而不是DateTime。所以这不是你的错,但 Visual-Studio 团队可以改进此消息。 FormatException 的 Message 属性不包含 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);
};
【讨论】: