注意:保留小数位数用用到BigDecimal类型做转换,所以要有这行引入jar包的程序:
import java.math.BigDecimal;
1. 四舍五入保留两位小数:
double a = 123.0232363869654697132695;
a = new BigDecimal(doubleValue).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
2. 各种保留小数点的方式:
只需设置setScale(int newScale, RoundingMode roundingMode)
的RoundingMode 参数即可:
RoundingMode | value |
---|---|
CEILING | 向正无限大方向舍入的舍入模式。 |
DOWN | 向零方向舍入的舍入模式。 |
FLOOR | 向负无限大方向舍入的舍入模式。 |
HALF_DOWN | 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。 |
HALF_EVEN | 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。 |
HALF_UP | 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。 (就是四舍五入) |
UNNECESSARY | 用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。 |
UP | 远离零方向舍入的舍入模式。 |
double doubleValue = -2.222;
String s = doubleValue+"";
//四舍五入 >=0.##5 进位 例如: 2.222 -> 2.22 2.225 -> 2.23 -2.225 -> -2.23
doubleValue = new BigDecimal(s).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(doubleValue);
// >0.##5 进位 例如: 2.222 -> 2.22 2.225 -> 2.22 2.226 -> 2.23 -2.225 -> -2.22
doubleValue = new BigDecimal(s).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue();
System.out.println(doubleValue);
// 正数进位,负数舍去 (趋向正无穷) 例如: 2.222 -> 2.23 2.225 -> 2.23 -2.225 -> -2.22
doubleValue = new BigDecimal(s).setScale(2, BigDecimal.ROUND_CEILING).doubleValue();
System.out.println(doubleValue);
// 正数舍去,负数进位 (趋向负无穷) 例如: 2.222 -> 2.22 2.225 -> 2.22 -2.225 -> -2.23
doubleValue = new BigDecimal(s).setScale(2, BigDecimal.ROUND_FLOOR).doubleValue();
System.out.println(doubleValue);
//直接进位(远离0) 例如:2.222 -> 2.23 2.225 -> 2.23 -2.225 -> -2.23
doubleValue = new BigDecimal(s).setScale(2, BigDecimal.ROUND_UP).doubleValue();
System.out.println(doubleValue);
//直接舍去(趋向0) 例如:2.222 -> 2.23 2.225 -> 2.22 -2.225 -> -2.22
doubleValue = new BigDecimal(s).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
System.out.println(doubleValue);