类型转换Double类型比较格式化输出作业20210111

在这里插入图片描述

张三上班
张三在上班途中, 可以选择走路和汽车两种方式
但他不清楚哪种方式比较快, 因为骑车需要找车, 开锁, 停车 需要耽搁很多时间.
设找到自行车, 开锁, 骑上自行车需要花27秒, 停车需要花23秒
步行每秒1.2米, 骑车每秒3.0米
给出张三距离公司的距离, 请问是骑车快还是走路快.
输入:
一个整数, 表示到公司的距离
输出:
如果骑车快, 输出"建议骑车"
如果走路快, 输出"建议走路"
如果一样快, 输出"骑车或走路都行"

public class Task111 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int length = -1; //距离初始化为-1
		System.out.println("请输入张三离公司的距离:");
		while(true) {
		    length = input.nextInt();
			if(length > 0) {
				break;
			} else {
				System.out.println("输入错误,请重新输入");
			}
		}
		// 步行每秒1.2米,步行时间为
		double time1 = length / 1.2;
		// 骑车每秒3.0米,设找到自行车, 开锁, 骑上自行车需要花27秒, 停车需要花23秒
		double time2 = length / 3.0 + 27 + 23;
		if(isEqual(time1, time2)) { //如果相等
			System.out.println("当距离为:" + length + "时,骑车或走路都行");
			System.out.printf("此时用时:%.1f秒\n",time1);
		} else {
			if(time1 > time2) { //步行比骑车时间久
				System.out.println("当距离为:" + length + "时,建议骑车");
				System.out.printf("此时用时:%.1f秒\n",time2);
			} else {
				System.out.println("当距离为:" + length + "时,建议走路");
				System.out.printf("此时用时:%.1f秒\n",time1);
			}
		}
	}

	//判断a,b在指定范围内是否相等
	public static boolean isEqual(double a, double b) {
		if(Math.abs(a - b) < 0.1) { //如果这两个数之差的绝对值小于0.1就认为其相等
			return true; //相等返回true
		} else {
			return false; //不等返回false
		}
		
	}
}

关键问题就是double类型的比较
1、借助doubleToLongBits方法:
doubleToLongBits的介绍

		double a = 0.0022001;
		double b = 0.0022;
		Double.doubleToLongBits(a) == Double.doubleToLongBits(b); //返回true或false
		Double.doubleToLongBits(a) > Double.doubleToLongBits(b);
		Double.doubleToLongBits(a) < Double.doubleToLongBits(b);

2使用BigDecimal

public class Test {
	public static void main(String[] args) {
		double a = 0.0022000000000001;
		double b = 0.0022;
		BigDecimal data1 = new BigDecimal(a);
		BigDecimal data2 = new BigDecimal(b);
		data1.compareTo(data2);
	}
}

3自己定义一个方法在两实数的差在允许的范围内认为相等既可认为是相等的,同理也可以自己重写compareTo方法
有次作业涉及了compareTo的使用可以参考

//判断a,b在指定范围内是否相等
	public static boolean isEqual(double a, double b) {
		if(Math.abs(a - b) < 0.1) { //如果这两个数之差的绝对值小于0.1就认为其相等
			return true; //相等返回true
		} else {
			return false; //不等返回false
		}
	}

本题比较适合用上面这种方法,结合实际情况,比如骑车用了12.0444444秒步行用了12.03482秒(打比方),这种就没有必要纠结了,肯定两种方式都可以。
注意:使用此种方法时候,必须把判断是否相等放在前面,因为实际上他是不相等的,只是你认为这种情况下他相等。所以要先判断是否满足你给的条件,如果不满足在让其去比较大小。
在这里插入图片描述

我是帕吉一个风度翩翩的胖子!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值