实际应用中,经常可以遇到浮点数之间相除然后向上取整,比如客流量与常量之比和店员数之间就应向上取整,多一个人都应该加一名员工。
先谈谈什么是向上取整,什么是向下取整
上取整,不管四舍五入的规则,只要后面有小数前面的整数就加1。
下取整,不管四舍五入的规则,只要后面有小数忽略小数给定。
比如:4.0,调用用向下取整函数,得到的是4。
调用用向上取整函数,得到的是5。
因为后面有小数0也是
java中向上取整的方法
- 三目运算符
x / y + (x % y != 0 ? 1 : 0);
- 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