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

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


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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • hql删除mysql语句_如何使用delete语句删除数据

    hql删除mysql语句_如何使用delete语句删除数据如何使用delete语句删除数据发布时间:2021-01-1510:57:41来源:亿速云阅读:83作者:小新栏目:数据库这篇文章主要介绍如何使用delete语句删除数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!怎么使用delete语句删除数据?创建一个临时表,用于演示sqlserver语法中delete删除的使用方法IFOBJECT_ID(‘tempdb..#tb…

    2022年6月16日
  • mysql用root登录

    mysql用root登录

    2022年4月3日
  • FFM模型在点击率预估中的应用实践

    FFM模型在点击率预估中的应用实践这篇文章,将主要讲述FFM模型在CTR预估中的应用。

    2022年5月12日
  • app制作好后怎么上线_app如何上线到应用市场

    app制作好后怎么上线_app如何上线到应用市场自己开发一款APP上线前的步骤问题额,是这样的,一款App想要上线的话,是不需要跟国家部分打交道的。你需要的是和其他公司去打交道。比如说苹果的App,你想在APPstr上线的话,首先你要有一个开发者账号。这个账号是直接跟美国苹果公司申请的,费用是99美元一年。申请的时间大约是一个月左右。账号下来了之后,就可以上传安装包,苹果公司会审核这款App,值得一提的是,苹果公司的审核机制很严格,审核的时间…

    2022年10月30日
  • SpringBoot之HandlerInterceptor拦截器的使用 ——(一)「建议收藏」

    SpringBoot之HandlerInterceptor拦截器的使用 ——(一)「建议收藏」HandlerInterceptor简介拦截器我想大家都并不陌生,最常用的登录拦截、或是权限校验、或是防重复提交、或是根据业务像12306去校验购票时间,总之可以去做很多的事情。1、定义实现类定义一个Interceptor非常简单方式也有几种,我这里简单列举两种1、类要实现Spring的HandlerInterceptor接口2、类继承实现了HandlerInterc…

    2022年7月25日
  • tree命令使用

    tree命令使用aliastree=”find.-print|sed-e’s;[^/]*/;|____;g;s;____|;|;g'”

    2022年7月24日

发表回复

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

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