bigdecimal保留2位小数_java bigdecimal保留两位小数

bigdecimal保留2位小数_java bigdecimal保留两位小数本篇分享Java注解方法实现BigDecimal保留两位小数!欢迎打卡学习!

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

【辰兮要努力】: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相关知识


?非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞? 关注❤️ 分享? 留言?thanks!!!

?愿我们奔赴在各自的热爱里!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190356.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 模电知识总结(一)

    模电知识总结(一)半导体的基本特性半导体的物理基础:1.掺杂特性2.热敏特性3.光敏特性2.本征半导体:原子排列整齐、晶格无缺陷、纯净的半导体(在热力学温度零度,由于共价键的束缚,价电子能量无法挣脱共价键的束缚,因此晶体中没有自由电子,此时半导体相当于绝缘体。)本征半导体的导电能力很差。(载流子浓度与原子密度相比很少)本征激发(热激发):由热能产生电子-空穴对的现象。随着温度升高,载流子浓度(指数)增加,其电阻率的温度系数是负的,这是半导体导电与金属导电的根本不同点。(相同温度下,锗的载流子浓度大于硅。)

  • Linux 操作系统原理 — 操作系统的本质「建议收藏」

    Linux 操作系统原理 — 操作系统的本质「建议收藏」目录文章目录目录操作系统的起源操作系统和高级编程语言使硬件抽象化操作系统的起源在操作系统尚不存在的年代,人们通过各种按钮来控制计算机,这一过程非常麻烦。于是,有人开发出了仅仅具有加载和运行功能的监控程序(Supervisor),这就是操作系统的原型。通过监控程序,程序员可以根据需要将各种应用程序加载到内存中运行。虽然仍旧比较麻烦,但现在开发的工作量得到了很大的缓解。随着时代的发展,人们…

    2022年10月29日
  • 如何使用SpringBoot AOP 记录操作日志、异常日志?

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:咫尺的梦想_w cnblogs.com/wm-dv/p/11735828.html 平时我们在做项目时经常需要…

  • 2016技术展望:虚拟化仍是IT投资和迁移的重点「建议收藏」

    2016技术展望:虚拟化仍是IT投资和迁移的重点

  • android studio快捷键集合[通俗易懂]

    \itemCtrl+P  查看变量参数信息,也就是看变量是哪种类型  \item Ctrl+B  查找该变量的定义位置。  \item Ctrl+Q  查找快速文档,即在另外一个窗口中打开其声明  \item Alt+Shift+C  查看工程最近更改的地方  \item Ctrl+space  自动完成代码  \item Ctrl+shift+Enter  自动填充表达式

  • 中国大推力矢量发动机WS15 跨入 世界先进水平!

    中国大推力矢量发动机WS15 跨入 世界先进水平!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号