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

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

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

上取整,不管四舍五入的规则,只要后面有小数前面的整数就加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

版权声明:本文为weixin_56851586原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。