如何在 Java 中截断 double 类型小数至两位(不四舍五入)

发布时间 - 2026-01-23 00:00:00    点击率:

java 中截断 double 小数位数到两位(非四舍五入),需避免 `printf` 等默认向上/银行舍入行为,推荐使用 `decimalformat` 配合 `roundingmode.down` 或 `bigdecimal.setscale(2, roundingmode.down)` 实现精确截断。

在 Java 中,System.out.printf("%.2f", 19.867) 或 String.format("%.2f", 19.867) 默认采用 HALF_UP 舍入模式,因此会输出 19.87 —— 这是“四舍五入”,而非题目要求的“直接截断”(即向零方向舍去多余小数)。要实现真正的保留两位小数且不进位(如 19.867 → 19.86,-3.149 → -3.14),必须显式指定舍入模式为 RoundingMode.DOWN。

✅ 推荐方案一:使用 DecimalFormat

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

⚠️ 注意:"#.##" 模式会自动省略末尾零(如 5.0 → "5"),若需强制显示两位小数(如 5.00),应改用 "0.00" 模式:

DecimalFormat df = new DecimalFormat("0.00"); // 保证输出两位小数
df.setRoundingMode(RoundingMode.DOWN);

✅ 推荐方案二:使用 BigDecimal(更精确、推荐用于金融等敏感场景)

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

double number1 = 19.867;
BigDecimal bd = new BigDecimal(Double.toString(number1)) // ⚠️ 关键:用字符串构造,避免 double 二进制精度误差
                .setScale(2, RoundingMode.DOWN);
System.out.println(bd.doubleValue()); // 19.86
// 或直接获取字符串结果(推荐):
System.out.println(bd.toString()); // "19.86"

❗ 重要提醒:务必使用 new BigDecimal(Double.toString(number1)) 而非 new BigDecimal(number1),否则可能因 double 的二进制表示缺陷引入意外精度误差(例如 0.1 在 double 中本就不精确)。

? 总结:

  • printf / String.format 不支持自定义舍入模式,不可用于截断需求
  • DecimalFormat 简洁易用,适合格式化输出,但注意模式选择与零值显示逻辑;
  • BigDecimal 更健壮、精确,是处理货币或高精度截断的首选,务必通过字符串构造以规避浮点误差;
  • 所有方案中,RoundingMode.DOWN 表示“向零方向舍去”,对正负数均有效(-19.867 → -19.86,非 -19.87)。


# java  # 金融  # 格式化输出  #  


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  香港服务器WordPress建站指南:SEO优化与高效部署策略  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  JS经典正则表达式笔试题汇总  linux top下的 minerd 木马清除方法  如何在搬瓦工VPS快速搭建网站?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  jQuery 常见小例汇总  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  教你用AI将一段旋律扩展成一首完整的曲子  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  网站制作报价单模板图片,小松挖机官方网站报价?  如何获取PHP WAP自助建站系统源码?  手机网站制作与建设方案,手机网站如何建设?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  网站建设保证美观性,需要考虑的几点问题!  制作电商网页,电商供应链怎么做?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  JavaScript如何实现继承_有哪些常用方法  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  Laravel怎么使用artisan命令缓存配置和视图  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何用好域名打造高点击率的自主建站?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  微信小程序 HTTPS报错整理常见问题及解决方案  简单实现jsp分页  IOS倒计时设置UIButton标题title的抖动问题  Python文件操作最佳实践_稳定性说明【指导】  大型企业网站制作流程,做网站需要注册公司吗?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  C++用Dijkstra(迪杰斯特拉)算法求最短路径  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  javascript日期怎么处理_如何格式化输出  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  如何制作一个表白网站视频,关于勇敢表白的小标题?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何安全更换建站之星模板并保留数据?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何在IIS7中新建站点?详细步骤解析  米侠浏览器网页背景异常怎么办 米侠显示修复  JavaScript实现Fly Bird小游戏  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?