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

Java 四舍五入

2017-01-09 17:01 423 查看
一、几种四舍五入的方法

public static class Test {

public static void main(String[] args) {

String str = "111.675";

//方法1:DecimalFormat

DecimalFormat df = new DecimalFormat("#.00");

try {

Number n = df.parse(str);

Double d = n.doubleValue();

System.out.println("" + d);

} catch (ParseException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

String aString = df.format(Double.parseDouble(str));

System.out.println(aString);

//方法2:NumberFormat

NumberFormat nf = NumberFormat.getInstance();

nf.setMaximumFractionDigits(2);

try {

Number n = nf.parse(str);

double d = n.doubleValue();

System.out.println("" + d);

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(nf.format(Double.parseDouble(str)));

//方法三:算术

double d = ((double)Math.round(Double.parseDouble(str) * 100)) / 100;

System.out.println("" + d);

BigDecimal bd = new BigDecimal(str).setScale(2, RoundingMode.HALF_UP);

double dd = bd.doubleValue();

System.out.println(bd.toString());

System.out.println("" + dd);

}

}


结果如下:

111.675

111.68

111.675

111.68

111.68

111.68

111.68

通过结果可以看到,DecimalFormat和NumberFormat在将String转换成数字的过程中,没有进行四舍五入;在调用format的时候,才根据设置进行了四舍五入的转换。

这两个类即使使用setRoundingMode也是相同的结果。而使用BigDecimal转换时,可以在String转换成数字的过程中,进行四舍五入。

二、RoundingMode(从另一博客中直接截取)

ROUND_CEILING: 舍位时往正无穷方向移动 1.1->2 1.5->2 1.8->2 -1.1->-1 -1.5->-1 -1.8->-1
ROUND_DOWN:向0的方向移动1.1->1 1.5->1 1.8->1 -1.1->-1 -1.5->-1 -1.8>-1
ROUND_FLOOR:与CEILING相反,往负无穷 1.1->1 1.5->1 1.8->1 -1.1->-2 -1.5->-2 -1.8->-2
ROUND_HALF_DOWN:以5为分界线,或曰五舍六入1.5->1 1.6->1 -1.5->-1 -1.6->-2 1.15->1.1 1.16->1.2 1.55->1.6 1.56->1.6
ROUND_HALF_EVEN:同样以5为分界线,如果是5,则前一位变偶数1.15->1.2 1.16->1.2 1.25->1.2 1.26->1.3
ROUND_HALF_UP:最常见的四舍五入
ROUND_UNNECESSARY:无需舍位
ROUND_UP:与ROUND_DOWN,远离0的方向1.1->2 1.5->2 1.8->2 -1.1->-2 -1.5->-2 -1.8->-2

摘录自:

  BigDecimal 的roundMode 舍位模式

  IEEE的舍入规则

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