请注意 .NET 中 Single/float 数据类型的问题

Posted by NosaLee in .NET Programming on 14-10-2013. Tags: , , , , ,

© 牧山道人,转载请注明原文网址。
_____________________________________

今天解决了一个问题:Dictionary 泛型容器的 Key 重复,导致 Dictionary 转 SortedDictionary 时报错。

究其原因,是将 Single/float 数据类型作为自定义 Comparer 类型引起的。

原理不多讲,请看下面的例子:
Single/float 的 293830.001 与 293830 相等,甚至 293830.01 也等于 293830,但 830.001 与 830 却不相等,也就是说达到一定数量级后,.NET 会忽略 Single/float 的一定量的小数,具体是多少,我不知道,有兴趣可以测试。

但事实上就算忽略的是十万分之一,这也会导致程序工作异常。

所以,童鞋们请注意了,如果你需要在 .NET 比较带小数的数值,特别是较大数值,一定不要用 Single/float,笔者建议用 Double/double(因为 Decimal/decimal 要占 16 个字节,一般用不到这么大的数,太浪费资源了)。

以上问题在 .NET 2.0 中存在,更高版本未知。

Post a comment