这两天,全国各地的网友纷纷开始调戏自己的手机计算器了。
事情的起因是这样的,有很多网友发现拿自己手机内置计算器计算10%+10%,得到的结果不是0.2,而是0.11。而且这并不是个别厂商的系统bug,大部分手机自带计算器都中招了,苹果、华为、小米、OPPO无一例外,只有魅族和锤子自带计算器输出结果是正常的0.2。
华为Mate20自带计算器计算10%+10% ,
你的手机算出来是个啥?
对此,魅族科技副总裁华海良在微博回应说,10%+10%=0.11是国外的使用逻辑,国内的算术逻辑是10%+10%=0.2。魅族计算器因为针对不同地区进行了针对性设置,国内的手机可以正确计算10%+10%,而其他地区算出来还是0.11。
华为荣耀业务部总裁赵明则表示,这是因为计算器在考虑国外算小费的情景,“这时100+10%相当于100+100×10%,是一种出于人性化考虑的设计。”
华为荣耀业务部总裁赵明微博
所以手机计算器到底是怎么处理百分号的呢?下面我们实际来动手分析一下它的逻辑吧。以我手边的华为手机为例,在计算器上输入10%+10%,得到的结果是0.11。是不是这些自带计算器的算法有问题,遇到百分号就不会处理了呢?
咱们用更复杂的乘除法试试,算一算10%×10%和10%10%.
会算了会算了,它终于会算了~
看来,使用手机内置计算器,计算百分数的乘除法都正确,只是在进行加减法运算的时候会出点问题。如果你在手机内置计算器里输入X±Y%,计算出的结果其实是X(100%±Y%)。但是手机计算器为什么要把百分号的算法设置得这么飘逸呢?
实际上,百分号在科学计算器中的用法是符合我们计算常识的,但在普通计算器中一般采用了实用简化,Win7下的计算器和市面售卖的普通计算器一般都采用这一运算逻辑,而手机内置计算器沿用了这种设置。
拿公司的普通计算器计算10+10%,也是不太聪明的亚子
这种设置主要针对的是日常使用场景,计算个折扣、小费、利息什么的就特别方便。比如我买了吊牌价75的毛衣,发现全场减价25%,这个时候我实际要花多少钱呢?
标准算法为75×(1-25%)=56.25,而这里对这种算法做了简化,你只需要输入75-25%,就直接得到了结果,是不是比还要考虑乘除法优先于加减法,括号内优先于括号外,然后再去按计算器要方便多了?
所以说,含有百分号的加减法并不是系统bug,而是这种计算器的逻辑,一切从实用出发,就像傻瓜式滤镜一秒把你变西施貂蝉,不用再钻研PS技术了一样。这实际上是一个大智若愚的设置啊。
参考文献:
[1] 《计算器使用方法》https://www.jd.com/phb/zhishi/fa980e8b8d63dc80.html?cls=1
[2] GB/T 4967-1995 电子计算器通用技术条件
[3]https://devblogs.microsoft.com/oldnewthing/20080110-00/?p=23853
领取专属 10元无门槛券
私享最新 技术干货