依赖于 C# 十进制区域性



我正在浏览另一个开发人员的一些代码,我发现一些代码似乎......好丑陋和不必要的。

我知道在解析字符串时,我们需要正确使用文化信息,否则您可能会遇到"1.2"与"1,2"类型的问题。 在这种情况下,开发人员使用的是存储为小数的 NumericUpDown。

float fValue = System.Convert.ToSingle(numericUpDown1.Value, System.Globalization.CultureInfo.InvariantCulture)

我的问题是:- 以下代码是否等效?- 文化信息会得到妥善处理吗?
- 这个演员表可以抛出一个例外吗?

float fValue = (float)numericUpDown1.Value;

如果它们不等效(或安全(,您能否解释原因并提出"正确"的解决方案?

提前感谢!

Convert.ToSingle(value, culture)调用((IConvertible)value).ToSingle(culture)。 然后decimalIConvertible.ToSingle忽略传入的文化并返回Convert.ToSingle(value),它只返回(float)value

的,您的代码是等效的。

是的,只有当 numericupdown1 值很小时,您的代码才等效于该代码。但如果该值为 41.00027357629127 或类似值,它将返回 4.10002732E+15。

因此,通过使用浮点数。Parse("numericUpDown1.Value", CultureInfo.InvariantCulture.NumberFormat(;您可以获得确切的值

最新更新