因为这个小问题把仿真平台跑了一遍又一遍的菜鸡表示哭晕在厕所。。。
鉴于本来对平台就不是很熟,又遇到这么小的点在平台里,真是“福气”。
double属于floating binary point types,double型在运算使会先将数值转换成二进制的数值表示再做运算,但是在转换成二进制代码表示的时候,存储小数部分的位数会有不够的现象,即无限循环小数,故会有非常小的误差,但此时若进行==的判断则会出问题,菜鸡本鸡就死在了这里。下文中对原因讲述很清楚,还给出了java的解决办法。
https://blog.csdn.net/dongapple/article/details/76974624?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3
而对于其他语言环境,则可采用:
1、在误差要求较低时:乘以一个整数10000或者100000,加上0.00001或0.000005之后无条件舍去小数,再除以前面乘上的数值;
2、将要使用的数小数点右移,改成int型进行比较,用到具体数值的时候再进行处理;
3、避免使用==来判断浮点数,此次采用在二者相差在一定范围内的时候认为二者相等,将其加入同一时刻的事件队列,问题迎刃而解;
4、还有人提到可以自己封装一个类,也有人说可以将int还是double型重新封装一下,不知道是不是和java里的封装异曲同工。不过菜鸡本鸡是不断然不会这么高端的操作的,希望当菜鸡不再菜的时候能会吧,哈哈哈哈。。。所有菜鸡本鸡弱弱地认为,对自己来说,更好的办法也许是,用不起躲得起的战略,避免使用double类型进行操作。。。