是 C# 十进制文化依赖

Is a C# decimal cultural dependent

我正在查看另一位开发人员的一些代码,我发现一些代码看起来...非常丑陋且不必要。

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

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

我的问题是: - 以下代码是否等效? - 文化信息会得到妥善处理吗?
- 这个转换能抛出异常吗?

float fValue = (float)numericUpDown1.Value;

如果它们不等价(或不安全),您能否解释原因并提出 "correct" 解决方案?

提前致谢!

Convert.ToSingle(value, culture) 呼叫 ((IConvertible)value).ToSingle(culture)decimalIConvertible.ToSingle 然后忽略传入的文化和 returns Convert.ToSingle(value),这只是 returns (float)value.

是的,你的代码是等价的。

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

所以,通过使用 float.Parse("numericUpDown1.Value", CultureInfo.InvariantCulture.NumberFormat);你可以得到准确的值