已有101人关注
为什么要把注释下面的double换成float?
发表在Java图书答疑 2020-02-28 悬赏:4 学分 《零基础学Java》第3章 流程控制 80页-80页
是否精华
版块置顶:

import java.util.Scanner;

public class BuyNoodle {
public static void main(String[] args) {
int money = 10;
Scanner sc = new Scanner(System.in);
System.out.print("请输入挂面的价格(单位元):");
double price = sc.nextDouble();
if (price <= 10) {
int number = (int) (money/price);
// 小数点后的数字,float类型的浮点数要少于double类型的浮点数
//这个注释下面的一行为什么要把double换成float?
//这个实例是零基础学习Java中80页的动手纠错这是我自己复制要纠错的代码,我没有改动
//它这个动手纠错的答案就是把double改成了float
double left = (double) (money - price * number);
System.out.println("小男孩买了" + number + "袋挂面,还剩" + left + "元RMB");
} else {
System.out.println("对不起!您的钱带少了……");
}
sc.close();
}
}
分享到:
精彩评论 1
lkhight
学分:665 LV6
2020-03-01
沙发

默认(用double)在这种用例下可以得到类似这种错误结果:

 

请输入挂面的价格(单位元):4.99
小男孩买了2袋挂面,还剩0.019999999999999574元RMB


但是即使修改你描述的代码(用float)以后,也会有:

请输入挂面的价格(单位元):4.999999999
小男孩买了2袋挂面,还剩2.0000002E-9元RMB

 
两种答案其实都是错的,只不过用float在低精度的时候有舍入操作,会“显得”对

了解并使用这个类:BigDecimal

 

首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照