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