去掉BigDecimal类型变量小数点后多余的零
业务背景:mysql中A表中的B字段的类型是decimal类型,小数位数是三位,某一条数据的值是3000000,在Java中查询出来的结果是3000000.000,这样显示在页面中不太好看,用户希望看到是3000000。
解决办法:使用 stripTrailingZeros().toPlainString()来解决。下面举例说明如何去掉BigDecimal类型变量小数点后多余的零:
BigDecimal testData = new BigDecimal("3000000.000");
System.out.println("直接转换成字符串后输出:" + testData.toString());
System.out.println("去掉尾部无用的零并转换成字符串后输出:" + testData.stripTrailingZeros().toString());
System.out.println("只展示数值字符串:" + testData.stripTrailingZeros().toPlainString());
System.out.println("工程计数法输出:" + testData.stripTrailingZeros().toEngineeringString());
测试结果:
直接转换成字符串后输出:3000000.00
去掉尾部无用的零并转换成字符串后输出:3E+6
只展示数值字符串:3000000
工程计数法输出:3E+6
但是,如果将3000000.000改为3000000.700等,小数点后面有非零数字的场景,则stripTrailingZeros().toString()不会输出为科学计数法。
toString(),toPlainString(),toEngineeringString() 这三个方法都是用于将BigDecimal 转换成字符串,不同之处是toString()有可能会使用科学记数法,toPlainString()只展示数值,不使用科学记数法,toEngineeringString()工程计数法,与科学技术法类似,但要求10的幂必须是3的倍数。
toPlainString
|
toString
|
toEngineeringString
|
1000
|
1 * 10^3
|
1 * 10^3
|
10000
|
1 * 10^4
|
10 * 10^3
|
100000
|
1 * 10^5
|
100 * 10^3
|
1000000
|
1 * 10^6
|
1 * 10^6
|
但是,下面的方法不可以使用stripTrailingZeros()去除末尾无用的零,只能手动转换。
public static void main(String[] args) {
BigDecimal ratio= new BigDecimal("0.00");
System.out.println(ratio.stripTrailingZeros().toPlainString());
// 自行判断,判断相等的时候,使用comparTo(),equals()不靠谱
if (0 == BigDecimal.ZERO.compareTo(ratio)) {
System.out.println("0");
}
if (!BigDecimal.ZERO.equals(ratio)) {
System.out.println(" 居然不相等 ");
}
}
总结:BigDecimal是处理高精度浮点数运算的一个常用类,当需要将BigDecimal中保存的浮点数值打印出来,特别是在页面上显示的时候,就有可能遇到意料之外的科学计数法表示的问题。stripTrailingZeros()可以去除小数点后多余的0,但是存在用科学计数法表示的小瑕疵,此时如果再结合toPlainString()即可输出完整的数值字符串。
读后有收获,小礼物走一走,请作者喝咖啡。

作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南