1、方式一:使用DecimalFormat 方法:
将数字格式化为具有特定小数位数的字符串
DecimalFormat df = new DecimalFormat("0.000");
参数:第一个 0 表示在该位置上必须有一个数字,如果没有数字则显示为0
. 是小数点
000 表示小数点后必须有三位数字,如果实际数字不足三位,则会补零
结果:会对数字进行四舍五入。
public static void main(String[] args) {
double value = 1.23456789;
DecimalFormat df = new DecimalFormat("0.000");//保留小数点后3位,四舍五入
String formatted = df.format(value);
System.out.println(formatted);//打印 1.235
}
2、方式二:使用BigDecimal 方法
设置小数位数和舍入模式
double v = bd.setScale(3, RoundingMode.HALF_UP).doubleValue();
3是表示保留三位小数
RoundingMode.HALF_UP:如果要舍入的位数大于或等于5,则向上舍入;否则,向下舍入
类似于四舍五入
doubleValue():转换为double类型 请注意,这一步可能会导致精度损失
public static void main(String[] args) {
double value = 1.23456789;
BigDecimal bd = new BigDecimal(value);
double v = bd.setScale(3, RoundingMode.HALF_UP).doubleValue();//保留3位小数,四舍五入
System.out.println(v); //打印 1.235
}
3、BigDecimal 方法其他舍入模式
RoundingMode
提供了多种舍入策略
舍入模式 | 说明 | 案例 |
UP | 向上舍入。如果舍入的数字大于0,则向上舍入到下一个整数;如果为负数,则向下舍入到更小的整数 | 例如: 1.1 舍入到整数为 2 , -1.1 舍入到整数为 -1 |
DOWN | 向下舍入。无论数字的值如何,都会舍去小数部分,直接取整 | 例如: 1.9 舍入到整数为 1 , -1.9 舍入到整数为 -1 |
CEILING | 向上舍入到最接近的整数。如果数字为负,则向更大的方向舍入 | 例如: 1.1 舍入为 2 , -1.1 舍入为 -1 |
FLOOR | 向下舍入到最接近的整数。如果数字为负,则向更小的方向舍入 | 例如: 1.9 舍入为 1 , -1.9 舍入为 -2 |
HALF_UP | 四舍五入。如果舍入的数字大于或等于5,则向上舍入;否则,向下舍入 | 例如: 1.5 舍入为 2 , 1.4 舍入为 1 |
HALF_DOWN | 五舍六入。如果舍入的数字大于5,则向上舍入;等于5时向下舍入 | 例如: 1.5 舍入为 1 , 1.6 舍入为 2 |
HALF_EVEN | 银行家舍入法(也称为“偶数舍入”)。如果舍入的数字等于5,则向最近的偶数舍入 | 例如: 1.5 舍入为 2 , 2.5 舍入为 2 , 3.5 舍入为 4 |
UNNECESSARY | 不允许舍入。如果舍入会导致精度损失,将抛出 ArithmeticException 异常 | 例如:如果尝试将 1.234 舍入到两位小数, RoundingMode.UNNECESSARY 将会抛出异常,因为 1.234 不能精确表示为两位小数 |