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!!!

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pycharm IDE的配置与基本使用「建议收藏」

    Pycharm IDE的配置与基本使用「建议收藏」PycharmIDE的配置与基本使用官网地址:https://www.jetbrains.com/zh-cn/pycharm/选择指定的虚拟环境如何设置虚拟环境可参考Python的安装与配置设置快捷键eclipse模式持续补充

    2022年8月28日
    2
  • matlab画圆函数

    matlab画圆函数function[]=circle(x,y,r)%画圆函数%circle(0,0,4);gridon%xy是中心,r是半径rectangle(‘Position’,[x-r,y-r,2*r,2*r],’Curvature’,[1,1])axisequal%为了修饰曲线的颜色,宽度,圈盘填充颜色等,可以设置其他参数等,例如%’edgecolor’,’b’,其中edgecolor表示边框颜色,后面的b是颜色参数值;%facecolor’,’r’,其中facecolor表示内部填

    2022年6月19日
    87
  • dotnet publish 不生成pdb文件

    dotnet publish 不生成pdb文件文章目录引言解决方案直接修改`.csproj`文件通过vs修改引言随着项目的体积越来越大,导致publish的时候文件越来越多,然而生产环境中其实pdb调试文件并没有什么作用(remotedebug)除外,所以也就灵机一动想着是否可以不生成呢?解决方案直接修改.csproj文件<PropertyGroupCondition=”‘$(Configuration)|$(Platform)’==’Release|AnyCPU'”><DebugType>none&lt

    2022年5月11日
    57
  • 【Android音视频开发】【034】WEBRTC之ICE服务器搭建

    【Android音视频开发】【034】WEBRTC之ICE服务器搭建前篇由于ICE服务器是作为一个中转服务器来使用的,因此它必须搭建在外网,我是搭建在阿里云服务器上面的搭建ICE服务器需要一定的Linux经验和排错能力,没接触过Linux的量力而为切换到root用户sudosuroot安装opensslapt-getinstallopenssllibssl-devmake安装libevent2wgethttps://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar

    2022年6月8日
    33
  • linux系统线程通信的几种方式,Linux的进程/线程通信方式总结

    linux系统线程通信的几种方式,Linux的进程/线程通信方式总结Linux系统中的进程通信方式主要以下几种:同一主机上的进程通信方式*UNIX进程间通信方式:包括管道(PIPE),有名管道(FIFO),和信号(Signal)*SystemV进程通信方式:包括信号量(Semaphore),消息队列(MessageQueue),和共享内存(SharedMemory)网络主机间的进程通信方式*RPC:RemoteProcedureCall…

    2022年6月20日
    45
  • <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”的作用「建议收藏」

    <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”的作用「建议收藏」为页面添加正确的DOCTYPE很多设计师和开发者都不知道什么是DOCTYPE,DOCTYPE有什么用。DOCTYPE是documenttype的简写。主要用来说明你用的XHTML或者HTML是什么版本。浏览器根据你DOCTYPE定义的DTD(文档类型定义)来解释页面代码。所以,如果你不注意设置了错误的DOCTYPE,结果会让你大吃一惊。XHTML1.0提供了三种DOCTYPE可选择:(1)过渡…

    2022年7月14日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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