您的位置:首页 > 编程语言 > Java开发

Java 四舍五入计算问题

2016-03-16 18:06 399 查看
Java  四舍五入计算问题

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class Test {

public static void main(String[] args) {
//第一种方法并非完全是 四舍五入
double d1=2.346;
double d2=2.342;
//下面这四个数是重点
double d3=2.345;
double d4=2.3456;
double d5=2.3451;
double d6=2.3450;

DecimalFormat df=new DecimalFormat("#.00");
System.out.println(df.format(d1)); //2.35
System.out.println(df.format(d2)); //2.34
//严格意义他并不是四舍五入 虽然保留两位小数 如果第三位为5 但是他还需要看第四位
//第四位为0和第四位没有值情况相同都不进位 第四位不为0则进位
System.out.println(df.format(d3)); //2.34
System.out.println(df.format(d4)); //2.35
System.out.println(df.format(d5)); //2.35
System.out.println(df.format(d6)); //2.34

System.out.println("****************************");

//第二种方法
double f = 111231.5556;
BigDecimal b = new BigDecimal(f);
//HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。
System.out.println(b.setScale(2,RoundingMode.HALF_UP).doubleValue()); //111231.56
//HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。
System.out.println(b.setScale(2,RoundingMode.HALF_DOWN).doubleValue()); //111231.56
//HAIL_EVEN:银行家舍入法。
System.out.println(b.setScale(2,RoundingMode.HALF_EVEN).doubleValue()); //111231.56
//UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。
System.out.println(b.setScale(2,RoundingMode.UP).doubleValue()); //111231.56
//DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
System.out.println(b.setScale(2,RoundingMode.DOWN).doubleValue()); //111231.55
//CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于UP,
//若为负数,舍入行为类似于DOWN。Math.round()方法就是使用的此模式
System.out.println(b.setScale(2,RoundingMode.CEILING).doubleValue()); //111231.56
//FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于DOWN;若为负数,舍入行为类似于UP。
System.out.println(b.setScale(2,RoundingMode.FLOOR).doubleValue()); //111231.55

System.out.println("****************************");
//第三种
//Math.round()或者Math.rint():返回其值最接近参数并且是整数的 long,int或者double 值。
double b1=1.235;
System.out.println(Math.rint(b1)); //1.0
System.out.println(Math.round(b1)); //1
//如果要保留2位小数,那么
System.out.println(Math.rint(b1*100)/100); //1.24
//Math.round()不适用
System.out.println(Math.round(b1*100)/100); //1
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java