案例来源:
曾经有一次去现场调试,做的是配方的应用,客户要求4种原料配方比例加起来,要满足100%才可以开机,
即配方比例1+配方比例2+配方比例3+配方比例4=100%,如果大于100%,或者小于100%,则无法开机。
每种原料的配方比例要求精度是小数点后3位,例如12.123。
本来以为挺简单,就把4个值,加起来做个比较就行了,然后诡异的事情就出现了。第一张图是在触摸屏上设的配方比例,总配方比例屏上显示的也是100%。但是,到程序里监控一看, 显示的99.99999,就是第二张图。这样就达不到开机条件了,当时真是愁死了。
![](/club/bbs/upload/image/20230904/6382943136136959119032010.JPG)
![](/club/bbs/upload/image/20230904/6382943136973246808610822.JPG)
后来,没有办法,加了个判断条件,总配方比例只要在99.9999和100.0001之间都允许开机,总算是解决了。
也是借这个案例,让论坛各位大神分析分析,为什么浮点数相加时会出现这种情况?我从现场调试来看,并不是所有时候相加时都会出现,是偶然事件。