【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿我们奔赴在各自的热爱里…

一、业务场景

在很多商城看数据的业务中后台会定义很多BigDecimal类型的字段,但是数据库查询返回可能对于数值尾数过多

解决方案:前端或者后端做处理都行,但是正常还是推荐后台截取,后台通过注解在实体类上,可以实现一次操作,让所有的方法返回的对应值均保留对应的小数(自定义实现)


我们创建一个注解类,统一帮助我们实现对BigDecimal此类型字段数值的封装操作

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {public BigDecimalSerializer() {}public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if (value != null) {BigDecimal number = value.setScale(2, BigDecimal.ROUND_HALF_UP);gen.writeNumber(number);} else {gen.writeNumber(value);}}
}

创建完注解类后,具体什么字段需要保留两位有效数字,就在对应的字段上加上此注解

    @JsonSerialize(using = BigDecimalSerializer.class)private BigDecimal price;

最后返回的值就是保留两位有效数字的


二、相关方法

构造器描述

BigDecimal(int)     创建一个具有参数所指定整数值的对象。
BigDecimal(double)  创建一个具有参数所指定双精度值的对象。
BigDecimal(long)    创建一个具有参数所指定长整数值的对象。
BigDecimal(String)  创建一个具有参数所指定以字符串表示的数值的对象。

方法

add(BigDecimal)       BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal)  BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal)  BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal)    BigDecimal对象中的值相除,然后返回这个对象。
toString()            将BigDecimal对象的数值转换成字符串。
doubleValue()         将BigDecimal对象中的值以双精度数返回。
floatValue()          将BigDecimal对象中的值以单精度数返回。
longValue()           将BigDecimal对象中的值以长整数返回。
intValue()            将BigDecimal对象中的值以整数返回。

4舍5入

BigDecimal.setScale()方法用于格式化小数点
setScale(1)表示保留一位小数,默认用四舍五入方式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
setScaler(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入
setScaler(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样
setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

感兴趣的可以继续学习BigDecimal相关知识


Java注解方法实现BigDecimal保留两位小数(案例详解)相关推荐

  1. java.math.BigDecimal保留两位小数,保留小数,精确位数

    http://blog.csdn.net/yuhua3272004/article/details/3075436 使用java.math.BigDecimal工具类实现   java保留两位小数问题 ...

  2. java中保留两位小数的方法_Java中保留两位小数的四种方法实现实例

    在写程序的时候,有时候可能需要设置小数的位数,那么java中有哪几种保留小数位数的方法呢?本文以两位小数为例给出四种方法. package CodeJava_Leet; import java.mat ...

  3. Java中让浮点型数据保留两位小数的四种方法

    hello,你好呀,我是灰小猿,一个超会写bug的程序猿! 今天在进行开发的过程中遇到了一个小问题,是关于如何将double类型的数据保留两位小数.突然发现这方面有一点欠缺,就来总结一下. 一.Str ...

  4. java 乘法保留两位小数_java.math.BigDecimal保留两位小数,保留小数,精确位数

    java保留两位小数问题: 方式一(四舍五入形式保留两位小数,注意模式ROUND_HALF_UP): 四舍五入 double   f   =   111231.5585; BigDecimal   b ...

  5. java BigDecimal保留两位小数

    对于一些精准的数字,如涉及到金额时我们一般会使用BigDecimal类型来保存和处理.在处理保留小数位数时,如果通过DecimalFormat表达式需要注意下. 1.通过DecimalFormat保留 ...

  6. JAVA笔记:double四舍五入并保留两位小数的方法

    1.只要输出结果 double x1 = 0.026; System.out.println(String.format("%.2f", x1)); 2.数据转换 //方案一: g ...

  7. BigDecimal 保留两位小数

    java保留两位小数5种方法 四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text ...

  8. BigDecimal保留两位小数

    文章目录 前言 1.代码实现 2.方法详解 注释 前言 在项目中经常会用到小数的一些计算,而float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数 ...

  9. bigdecimal 保留两位小数_Python的保留小数及对齐

    Python的保留小数: 方法1:用round函数(有坑). median = 12.3004886print(round(median, 2)) # 保留两位小数print(round(median ...

最新文章

  1. matplotlib模块学习
  2. 简析TCP的三次握手与四次分手
  3. Unity将来时:IL2CPP是什么?
  4. jquery 判断是否有类名_Day037-JS、jQuery
  5. 风格迁移--U-GAT-IT模型(ICLR 2020)
  6. 怀旧服最新服务器塞卡尔,魔兽世界怀旧服:10个至今未开门的服务器!圣光服进度刚到20%!...
  7. Netty框架多人聊天案例,代码示例
  8. Qt5.x解决报错main.cpp:1:10: fatal error: QApplication: No such file or directory问题
  9. [Bootstrap]组件(二)
  10. 苹果电风扇软件Macs Fan Control Pro安装教程
  11. 如何使用OpenSSL工具生成根证书与应用证书
  12. 盖茨自说不善招聘、管理:善于“借力”
  13. 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云
  14. 微信域名防封技术,微信域名总是被封如何解决
  15. pytorch中DataLoader的num_workers
  16. 用python代码实现 函数调用 烤红薯的例子
  17. 5G真的有那么重要吗?
  18. ARM体系结构(1)- 工作模式与工作状态
  19. 【考研复试】某985考研复试英语面试问题汇总(综合面试+英语口语面试)
  20. TSearchRec类型

热门文章

  1. CLO如何在其软件结构中集成V-RAY
  2. 形参的种类及其能否改变实参
  3. python子域名扫描脚本
  4. pta习题:退休日期推算
  5. 以post的方式发请求,传参在url中
  6. 【服务监控】关于分布式系统监控的一些思考与总结
  7. 【调试】——idea远程调试服务器上的代码
  8. 在开发中总结的一点小技巧
  9. Vue开发环境搭建和vue-cli脚手架
  10. 简单脚本测试--对谈式脚本@read