You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何格式化double类型保留两位小数且不进行四舍五入?

Java实现Double保留两位小数且不四舍五入

下面是几种可行的实现方式,直接截断多余小数位而不进行四舍五入:

方法一:数学运算截断

通过先放大指定倍数、强制类型转换取整、再缩小回原量级的方式实现截断:

double number1 = 19.867;
// 乘以100后转int截断小数,再除以100.0恢复小数位
double truncated = (int)(number1 * 100) / 100.0;
System.out.printf("%.2f", truncated); // 输出 19.86

注意:这种方法在处理极大或极小的double数值时,可能因浮点数精度问题出现偏差,适合常规数值场景使用。

方法二:使用DecimalFormat指定舍入模式

借助DecimalFormat设置RoundingMode.DOWN(直接舍弃多余位数)来实现:

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

double number1 = 19.867;
DecimalFormat df = new DecimalFormat("#.##");
// 设置舍入模式为直接截断
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(number1)); // 输出 19.86

方法三:使用BigDecimal精确处理

如果需要更高的精度(比如避免浮点数本身的精度误差),可以用BigDecimal配合舍入模式:

import java.math.BigDecimal;
import java.math.RoundingMode;

double number1 = 19.867;
// 先转字符串再初始化BigDecimal,避免double转BigDecimal的精度丢失
BigDecimal bd = new BigDecimal(Double.toString(number1));
// 设置保留两位小数,舍入模式为直接截断
BigDecimal truncatedBd = bd.setScale(2, RoundingMode.DOWN);
System.out.println(truncatedBd.doubleValue()); // 输出 19.86

内容的提问来源于stack exchange,提问作者BBA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:01:16