是 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)
。 decimal
的 IConvertible.ToSingle
然后忽略传入的文化和 returns Convert.ToSingle(value)
,这只是 returns (float)value
.
是的,你的代码是等价的。
是的,只有当 numericupdown1 值较小时,您的代码才等效于该代码。
但如果该值为 41.00027357629127 或类似的值,它将 return 4.10002732E+15.
所以,通过使用 float.Parse("numericUpDown1.Value", CultureInfo.InvariantCulture.NumberFormat);你可以得到准确的值
我正在查看另一位开发人员的一些代码,我发现一些代码看起来...非常丑陋且不必要。
我知道在解析字符串时,我们需要正确使用文化信息,否则您可能会遇到“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)
。 decimal
的 IConvertible.ToSingle
然后忽略传入的文化和 returns Convert.ToSingle(value)
,这只是 returns (float)value
.
是的,你的代码是等价的。
是的,只有当 numericupdown1 值较小时,您的代码才等效于该代码。 但如果该值为 41.00027357629127 或类似的值,它将 return 4.10002732E+15.
所以,通过使用 float.Parse("numericUpDown1.Value", CultureInfo.InvariantCulture.NumberFormat);你可以得到准确的值