开发到现在发现一个VS2005 C# 的一个BUG吧 不知道有没有人碰到过(求版主进)
定义一个float,或double point 的对象 比如赋值是659.09173583984375 当我在程序运行时用即时窗口调出来查看时 ,大吃一惊 情况如下
point.ToString()
"659.091735839844 "
point
659.09173583984375
我有这样一个Dictionary <float or double ,StateofX_axis> 这里的key 用float 或double 类型来代替 当我要进行取值或是删除某个值时用 ContainsKey(key) 这里的key我是用point.ToString() 强制类型转换成float 或 double的 结果就是肯定找不到相匹配的, 不知道有没有人碰到过此事 有什么办法吗?
------解决方案--------------------不知道哦,没有试过
------解决方案--------------------Float 32位
Double 64位
精度不一样,做为Key是比较危险的事.
------解决方案--------------------decimal的精度最大,是28-29位,
楼主可以用decimal来代替float或double达到更精确的处理.
------解决方案--------------------这个不是bug 本来数据精度不一样。转换丢失精度很正常!
------解决方案--------------------这不是Bug,本来就是这样
------解决方案--------------------上面已有答案.
------解决方案--------------------浮点数的精度问题
------解决方案--------------------第一次听说用浮点数做Key。。。。
------解决方案--------------------学习
------解决方案--------------------.ToString( "G17 ");
.ToString( "R ");
------解决方案--------------------:)
------解决方案--------------------不是Bug,就是这样的
楼主仔细看看CLR原理就知道了
------解决方案--------------------为什么不先查一下MSDN再发贴呢
别说打击你,说这样的话挺傻的
------解决方案--------------------晕倒!
------解决方案--------------------地球人都知道了...
------解决方案--------------------是啊,不要轻易下结论(我也发过几次想当然的贴子!)
------解决方案--------------------晕. 这也叫BUG 啊?
一看就知道是TOSTRING 的问题.
你查看以下这个对象TOSTRING 的具体实现和要求 .
soaringbird说的非常好.
------解决方案--------------------这也叫Bug? 就不说答案吧, 你遇到这个问题要做的事情第一件就是查ToString()方法有没有什么说明,有,问题这不就解决了? 如果没有,那么就用反编译工具打开来看看怎么回事.....也解决了.