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
相关产品推荐
相关产品推荐

