10%+10% 不等于 0.2?

看到这个标题,你可能会觉得震惊,怎么会不是0.2呢?

最近在知乎上看到这个有意思的问题,为什么手机上的计算器计算 10%+10% 都错了,结果不是0.2,而是0.11。

第一感觉是不可思议,赶紧拿出我的华为手机(EMUI版本为9.1)测试了下,果然是0.11!

640?wx_fmt=png



看看谷歌的计算器,0.2没错。

640?wx_fmt=png

但是搜索计算器 再计算的结果却是0.11,很奇怪。

640?wx_fmt=png

然后在在线自动问答系统搜索引擎wolframalpha上看看https://www.wolframalpha.com/input/?i=10%25%2B10%25

640?wx_fmt=png

它给出了3种结果,有0.2和0.11 。

640?wx_fmt=png

ps:wolframalpha这个网站计算数学公式很不错,比如开根号算黄金分割比 

640?wx_fmt=png

搜索了下苹果和小米等手机都是如此。

640?wx_fmt=png

然而魅族手机却是个例外。

640?wx_fmt=png

魅族副总裁在微博上的解释是这样的 https://weibo.com/1444241363/I554TgDEs?

本质上并不是对或错的问题,我们只是考虑的更多,增加了人性化的算法判断。10%+10%=0.11 这个是国外的使用逻辑,而国内的算数逻辑是 10%+10%=0.2,所以我们针对不同地区的固件做了不同的算法判断。

算小费等特殊场景,很多国家餐厅吃饭给10-20%的小费,这时100+10%相当于100+100*10%,相当方便的一种人性化设计。

640?wx_fmt=png

所以10%+10%是按照10%+(10% x 10%)这个逻辑得出0.11的结果,对应的10+10%就是11。

只能说国内和国外使用习惯不同,中国人没有付小费的习惯,而且我们一般是用0.1+0.1算的,这应该算计算器的feature,不算bug。

640?wx_fmt=png

看看你的手机计算器结果是0.2还是0.11?

你可以创建一个名为`Course`的抽象类作为课程的基础类型,然后为`ExamCourse`和`CreditCourse`分别作为具体的子类来实现不同的成绩计算方式。以下是一个简单的示例: ```java // 定义抽象类 Course abstract class Course { protected String name; protected int attendance; protected int homework; protected int experiment; protected int finalExam; public Course(String name, int attendance, int homework, int experiment, int finalExam) { this.name = name; this.attendance = attendance; this.homework = homework; this.experiment = experiment; this.finalExam = finalExam; } // 普通方法计算总成绩,子类需要覆盖这个方法 public abstract double calculateTotalScore(); // 公共方法供外部获取信息 public String getName() { return name; } } // 实现 ExamCourse 类型 class ExamCourse extends Course { @Override public double calculateTotalScore() { return (attendance * 0.1) + (homework * 0.1) + (experiment * 0.1) + (finalExam * 0.7); } } // 实现 CreditCourse 类型 class CreditCourse extends Course { @Override public double calculateTotalScore() { return (attendance * 0.2) + (homework * 0.1) + (experiment * 0.1) + (finalExam * 0.6); } } public class Main { public static void main(String[] args) { ExamCourse examCourse = new ExamCourse("Java", 90, 85, 92, 88); System.out.println("Exam Course Name: " + examCourse.getName()); System.out.println("Total Score: " + examCourse.calculateTotalScore()); CreditCourse creditCourse = new CreditCourse("Maths", 95, 80, 87, 82); System.out.println("\nCredit Course Name: " + creditCourse.getName()); System.out.println("Total Score: " + creditCourse.calculateTotalScore()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值