为什么有的手机计算器上10%+10%=0.11,而不是0.2?
近日,10%+10%=0.11的问题刷屏各大网站。最早看到这个问题是一个网友在网上发帖吐槽:自己用华为手机计算器计算20%+20%=0.24。华为这么厉害的一家公司会出现如此低级的错误吗?于是我也用手上的华为手机计算了一下,没错,与网友的答案完全一样,难道真的是华为手机的bug。随后网友纷纷发帖,晒出自己用各种品牌手机计算器计算10%+10%得到0.11的答案,难道所有手机计算器都中毒了?
查看了很多资料后终于明白,这不是手机中毒,而是一种流行于欧美等国家的算法--单步计算法。什么意思呢?很多程序员都从编程的专业角度进行了解释,从这种算法的源码到百分计算计算的识别条件等。
近日,受非洲猪瘟影响,猪肉价格持续上涨。我们假设上涨前,猪肉价格为20元一斤,这段时间猪肉价格上涨了20%,那么现在猪肉多少钱一斤?按照国内的算法,现在的猪肉价格为20×(1+20%)=24元,但是按照单步计算法的计算,我们只需要写成20+20%即可,计算结果同样是24元。同样,如果猪肉的价格由原来的20元一斤,下降了20%,那么现在猪肉多少钱一斤?一般算法是20×(1-20%)=16元,单步计算法是20-20=16元。
从上面两个例子可以看出,涉及到百分数时的单步计算法,和我们日常使用的计算方法存在下面这样一个转化关系:单步计算法的a±b%就等于一般算法的a(1±b%)。如果使用计算器进行计算,显然单步计算法更简洁,需要按键的次数更少,再加上计算器刚出来时的按键没有现在这么好用,因此就采用了单步计算法作为默认的计算方法。
通过上面的分析可知,10%+10%=0.11并不是手机计算器的bug,也不是手机中毒了,这只是一种不同于我们常用的计算方法而已。如果掌握了这种方法,明显可以提高计算器的计算速度,但是这个方法与我们常用的方法存在差异,因此在计算时出错的可能也会比较大。因此也有手机厂家已经针对这个问题进行了本土化的改造,经过程序改造后,手机计算器也可以得出10%+10%=0.2的答案。
虽然从算法上来说,单步计算法用于计算器确实比我们常用的计算方法简单,但是在国内却少有人了解单步计算法,而且还需要额外学习一种计算方法,这也是大多数人不愿意做的。因此,国内的手机厂商完全可以将程序进行修改,以适应国人的计算习惯。