1:java四舍五入函数 Math.round
例子: int a=5;
int b=2;
int x=Math.round(a/b);
int f = Math.round(Float.valueOf(a)/b);
System.out.println(a/b);
System.out.println(x);
System.out.println(f);
解释:因为a,b都是int类型,所以在执行 a/b的时候值已经为整数,即5/2=2; 使用Math.round()还是为2。如果想要让5/2 的结果精确一些,需要先将a 或b 转换为 float 或者double 的数据类型,进行计算后,四舍五入,精确到整数位——》3。
2:控制精确位置的四舍五入:
例子:
DecimalFormat df=new DecimalFormat("#00.00");
float a=28f;
float b=15f;
int x=5;
int y=2;
System.out.println(df.format(new BigDecimal(a/b)));//推荐用法
System.out.println(df.format(a/b));//可能出现精确问题
System.out.println(df.format(x/y));
解释:使用DecimalFormat函数来控制精确位数,以#开头,以小数点 “."分隔 整数部分(左)和小数部分(右),用0(推荐用0)的个数表示最终结果的位数。如果整数部分为”#.00",最终会以实际整数部分的结果为准(即使实际超出控制格式0的个数也能正常显示),如果整数部分实际结果小于控制格式,会用0补全。
DecimalFormat df=new DecimalFormat("#.00");
df.format(0) 的结果为 " .00 "
df.format()的返回结果为String 类型
结果:
01.87
01.87
02.00
3:用 BigDecimal控制小数位数
BigDecimal bd=new BigDecimal(1.225f);
System.out.println(bd);
float c=bd.setScale(2, RoundingMode.UP).floatValue();
System.out.println(c);
float d =bd.setScale(2, RoundingMode.FLOOR).floatValue();
float e = bd.setScale(2, RoundingMode.DOWN).floatValue();
System.out.println(d);
System.out.println(e);
结果: 1.22500002384185791015625
1.23
1.22
1.22
分析:通过调用 setScale(int newScale, RoundingMode roundingMode)方法设置小数点。第一参数表示要保留的小数位数,第二个参数决定保留小数的方式,有如下取值:
RoundingMode.UP :向远离0的方向舍入,注意正负
RoundingMode.FLOOR :向负无穷方向舍入
RoundingMode.DOWN :向零方向舍入
RoundingMode.CEILING:向正无穷方向舍入
RoundingMode.HALF_EVEN:向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 。
RoundingMode.HALF_UP:向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6