本文主要是介绍spring boot的小数位丢失.00 或者.0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、背景
在使用spring boot时,前端的界面展示的数据是2 ,在数据库中存储的是小数。但是导出Excel的时候数据是 2.00 。奇了怪了为啥会不一样,数据都是一样的没有做过处理。
2、排查问题
经过层层的debug 发现数据库返回的数据是2.00,写入Excel的数据就是查询数据库原始的数据。
List<Map<String, Object>> data = jdbcTemplate.queryForObject(sql);
前端界面的接口调用同样的方法,查询的SQL返回的值data是一样的,但是在浏览器F12模式下看接口返回的值是2。并没有.00 ,说明spring boot在返回JSON数据的时候动了手脚。
3、解决方法
方法1:
如果前端对数据的格式不敏感,建议全部修改为字符串返回
spring:jackson:## 日期格式(可根据自己的需求修改格式)date-format: yyyy-MM-dd HH:mm:ss generator:## 将数值类型转换为字符串,解决long型精度丢失write_numbers_as_strings: true
方法2:
数据库返回的数据
数据库返回(Java类型) | 类型 | 小数位 | 默认添加 |
Double | 1.00 | 2位 | |
BigDecimal | 1.0 | 1位 |
手动对返回的小数,进行转化,转换为字符串,再替换掉结尾的.00或者.0
rowValue = (number instanceof Double && number != null && number.toString().endsWith(".0")) ? rowValue.replace(".0", "") :rowValue;
rowValue = (number instanceof BigDecimal && number != null && number.toString().endsWith(".00")) ? rowValue.replace(".00", "") :rowValue;
rowValue = (number instanceof Double && number != null && number.toString().endsWith(".000")) ? rowValue.replace(".000", "") :rowValue;
这篇关于spring boot的小数位丢失.00 或者.0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!