日期:2014-05-20  浏览次数:20777 次

开发到现在发现一个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()方法有没有什么说明,有,问题这不就解决了? 如果没有,那么就用反编译工具打开来看看怎么回事.....也解决了.