解决java中浮点数相除向上取整出错的方法

文章讨论了在Java中处理浮点数相除后向上取整的情况,指出了使用Math.ceil()方法可能因浮点数精度问题导致的误差。提供了一个解决方案,即通过控制浮点数精度后再进行向上取整,以确保结果正确,避免资源浪费。
摘要由CSDN通过智能技术生成

实际应用中,经常可以遇到浮点数之间相除然后向上取整,比如客流量与常量之比和店员数之间就应向上取整,多一个人都应该加一名员工。

先谈谈什么是向上取整,什么是向下取整

上取整,不管四舍五入的规则,只要后面有小数前面的整数就加1。
下取整,不管四舍五入的规则,只要后面有小数忽略小数给定。
比如:4.0,调用用向下取整函数,得到的是4。
调用用向上取整函数,得到的是5。
因为后面有小数0也是

java中向上取整的方法

  1. 三目运算符
x / y + (x % y != 0 ? 1 : 0);
  1. Math.ceil()方法
Math.ceil() 返回值、参数均为double类型, 如果参数为int类型,
idea不会报错,但是方法同时不会向上取整。

参数为int类型时,Math.ceil(3*1.0 / 2)。
        int ceil0 = (int)Math.ceil(26.6/ 3.8);
        double ceil1 =26.6/3.8;

        System.out.println("ceil0==="+ceil0);
        System.out.println("ceil1==="+ceil1);
ceil0===8
ceil1===7.000000000000001

那这就会出现一个问题,26.6/ 3.8因为浮点数的精度问题会在小数末尾自动进一,导致向上取整是出错,实际应用中则会浪费人力。

解决方法:控制浮点数的精度再进行向上取整。

        DecimalFormat format = new DecimalFormat("#.0");  //控制精度
        double c=26.6/ 3.8;
        String s = format.format(c);
        double v = Double.parseDouble(s);
        int ceil =((v-(int)(c))==0?(int)(c):(int)Math.ceil(c));
        
        System.out.println(ceil);
7
7.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B64A-消闲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值