BigDecimal保留两位小数失败问题

文章目录

  • 背景
  • 问题
  • 解决
  • 如何测试代码

背景

测试时发现在线swagger测试会自动处理BigDecimal小数点后面的数字,就是有零的会都给你去掉,比如9.000与9.500到最后都会被swagger处理成9跟9.5。使用postman测是最准的,测出来的就是9.000跟9.500。

问题

处理运费计算结果时,setScale(2,BigDecimal.ROUND_HALF_UP)不生效

解决

BigDecimal的setScale方法会生成一个新的BigDecimal对象,生成时目前猜测是走了构造(猜测对了,看下图),所以说BigDecimal在书写时一定要使用链式编程:
这么记:使用setScale方法后会new一个新的BigDecimal对象,这个时候就是两个对象了。新生成的对象你应该接收后再返回,这样才是setScale方法处理后的数据。

public class Test {public static void main(String[] args) {BigDecimal bigDecimal1 = new BigDecimal(5);bigDecimal1.setScale(2, BigDecimal.ROUND_HALF_UP);System.out.println("不用链式编程:" + bigDecimal1);System.out.println("使用链式编程:" + bigDecimal1.setScale(2, BigDecimal.ROUND_HALF_UP));BigDecimal bigDecimal2 = bigDecimal1.setScale(2, BigDecimal.ROUND_HALF_UP);System.out.println("用参数接,然后输出:" + bigDecimal2);BigDecimal bigDecimal3 = new BigDecimal(5.500);bigDecimal3.stripTrailingZeros();System.out.println("不用链式编程:"+bigDecimal3);System.out.println("使用链式编程:"+bigDecimal3.stripTrailingZeros());}
}

image.png
首先stripTrailingZeros()方法是一个去零方法,但是我们会发现这个返回的也是BigDecimal,但是不用链式编程却没有问题,这里面的原因是什么呢?原因其实很简单,很多人一想就明白了,肯定没有创建新的BigDecimal对象,而是使用静态的自定义常量(static final修饰的变量)或者是对BigDecimal对象做内部处理,感兴趣的可以点进去看看。
image.png

如何测试代码

测试的话最好用postman测,它相对于swagger来说是更严谨的。在运费计算接口中,实际返回的是9.000,但是swagger响应的就是9,这诚然不是我们想要的,我不需要你给我进行处理,因为这样我会造成误判。正好postman响应回来的就是9.000,所以选择使用postman。

使用postman时地址不要直接swagger上粘过去,打开F12,用swagger发一次请求,找到network找到请求头,然后复制访问的curl粘到postman

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/544585.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch 入门基础知识一(Pytorch 01)

一 深度学习基础相关 深度学习三个主要的方向:计算机视觉,自然语言,语音识别。 机器学习核心组件:1 数据集(data),2 前向传播的model(net),3 目标函数(loss), 4 调整模型参数和优化函数的算法…

Vue3+TypeScript 学习回顾,温故而知新

文章简介: (1)简介: 在 Vue3 中编码规范如下: 编码语言: JavaScript代码风格: 组合式API选项式、API简写形式: setup语法糖 (2)复习内容: 1.核心: ref、reactive、computed、w…

阿里EMO模型:AI生成表情丰富的视频

引言 在数字多媒体的时代,人们对于互动性和个性化视频内容的需求不断增长。阿里巴巴的EMO(Emote Portrait Alive)模型,作为一项前沿的人工智能技术,正引领着这一领域的革新之路。 EMO模型概述 EMO模型是阿里巴巴智能计…

​​SQLiteC/C++接口详细介绍之sqlite3类(十)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(九) 下一篇:​​SQLiteC/C接口详细介绍之sqlite3类(十一) 30.sqlite3_enable_load_extension&#x…

手机中的8款万能App推荐!

目录 1.全能AI工具箱——HuluAI 2.AI视频生成——巨日禄 3.全能办公套件——鲸鲮Office 4.视频音频转换器——VideotoMP3Converter 5.特效滤镜摄影——PicsArt 6.智能工具箱——SmartTools 7.手机视频编辑软件——KineMaster 8.安卓版万能文档阅读器——AllDocumentRea…

实现兼容性良好的前端页面开发

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

切面条-蓝桥杯?-Lua 中文代码解题第1题

切面条-蓝桥杯?-Lua 中文代码解题第1题 一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。 如果连续对折2次,中间切一刀,可以得到5根面条。 那么&#xf…

sqlalb第二十五关通关笔记

知识点: or and # 被过滤了有回显可以用联合注入这里可以利用双写绕过(亲测有效,) oorranandd这样的话可以使用错误注入(不演示了,有兴趣可以试一下) 又是一个id输入 测试是什么类型的注入 构…

宝塔 安装对外服务Tomcat和JDK

一、安装Tomcat\JDK 切记1:如果选择下载节点失败,请到软件商城安装 。 切记2:提醒安装Nginx或Apache ,先点安装,进入再打叉关闭。因为Tomcat服务足够为我们搭建JavaWeb网站服务了。 切记3:Nginx占用80端口…

回答自己一年前的一个问题,python如何动态拼接sql

首先谈谈应用场景吧,前提是针对查询接口做接口自动化,接口校验的脚本中,一般以响应报文作为预期值,通过sql查出的数据库值作为实际值,二者对比通过则认为接口输出正确。而sql从何而来呢,对于查询接口一般是…

高可用系统有哪些设计原则

1.降级 主动降级:开关推送 被动降级:超时降级 异常降级 失败率 熔断保护 多级降级2.限流 nginx的limit模块 gateway redisLua 业务层限流 本地限流 gua 分布式限流 sentinel 3.弹性计算 弹性伸缩—K8Sdocker 主链路压力过大的时候可以将非主链路的机器给…

校园博客系统 |基于springboot框架+ Mysql+Java的校园博客系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…