我正在浏览另一个开发人员的一些代码,我发现一些代码似乎......好丑陋和不必要的。
我知道在解析字符串时,我们需要正确使用文化信息,否则您可能会遇到"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)
。 然后decimal
的IConvertible.ToSingle
忽略传入的文化并返回Convert.ToSingle(value)
,它只返回(float)value
。
的,您的代码是等效的。
是的,只有当 numericupdown1 值很小时,您的代码才等效于该代码。但如果该值为 41.00027357629127 或类似值,它将返回 4.10002732E+15。
因此,通过使用浮点数。Parse("numericUpDown1.Value", CultureInfo.InvariantCulture.NumberFormat(;您可以获得确切的值