spring boot的小数位丢失.00 或者.0

本文讲述了在SpringBoot项目中,前端展示的数据库小数与Excel导出不同,经排查发现是JSON格式化导致。提供了两种解决方案:一是将数值类型强制转换为字符串;二是数据库返回时手动处理小数末尾的0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.002位
BigDecimal
1.01位

手动对返回的小数,进行转化,转换为字符串,再替换掉结尾的.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;
             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值