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.mzph.cn/news/757480.shtml

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

相关文章

数据库基本内容与安装MySQL数据库

目录 一.数据库基本内容 1.数据 (1)描述事物的符号记录 (2)包括数字,文字、图形、图像、声音、档案记录等 (3)以“记录”形式按统一的格式进行存储 2.表 (1)将不同…

Java SE 22 新增特性

Java SE 22 新增特性 作者:Grey 原文地址: 博客园:Java SE 22 新增特性 CSDN:Java SE 22 新增特性 源码 源仓库: Github:java_new_features 使用未命名的变量和模式 我们经常需要定义一些我们根本不需要的变量…

【Linux】基础 IO(动静态库)-- 详解

一、前言 为什么要使用别人的代码? 主要是为了提高程序开发的效率和程序的健壮性。 当别人把功能都实现了,然后我们再基于别人的代码去做二次开发,那么效率当然就提高了。其次,这里基于的别人当然不是随便找的一个人,…

[Qt学习笔记]Qt鼠标事件mouseMoveEvent实时获取图像的坐标和像素值

目录 1、介绍2、效果展示3、实现过程3.1 图像的加载和显示3.2 设置鼠标跟踪事件激活3.3 实现代码 4、源码展示 1、介绍 上一篇介绍了使用OpenCV的setMouseCallback回调函数实现获取鼠标点击点的图像坐标和像素值,本篇使用鼠标事件mouseMoveEvent函数来实现实时获取…

OPPO 后端二面,凉凉。。。

美众议院通过 TikTok 法案 之前我们讲了 老美要求字节跳动在 165 天内剥离短视频应用 TikTok,当时的最新进度是 TikTok 给 1.7 亿美国用户发弹窗,发动用户群众给国会打电话进行抗议。 但显然这点力度的抗议并不会造成什么实质影响。 昨晚,美国…

精读《useRef 与 createRef 的区别》

1 引言 useRef 是常用的 API,但还有一个 createRef 的 API,你知道他们的区别吗?通过 React.useRef and React.createRef: The Difference 这篇文章,你可以了解到何时该使用它们。 2 概述 其实原文就阐述了这样一个事实&#xf…

【EDSR】《Enhanced Deep Residual Networks for Single Image Super-Resolution》

CVPR workshops-2017 首尔大学 code: https://github.com/limbee/NTIRE2017/tree/masterhttps://github.com/sanghyun-son/EDSR-PyTorch 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Residual blocks4.2 Single…

华为OD机试 - 单向链表中间节点(Java JS Python C C++)

题目描述 给定一个单链表 L,请编写程序输出 L 中间结点保存的数据。 如果有两个中间结点,则输出第二个中间结点保存的数据。例如: 给定 L 为 1→7→5,则输出应该为7; 给定 L 为 1→2→3→4,则输出应该为…

盘点国内IP地址服务的功能及提供商

随着互联网的快速发展和普及,IP地址服务提供商在中国市场扮演着越来越重要的角色。这些代理软件提供商不仅为用户提供稳定的网络连接,还可以帮助用户实现IP地址切换、绕过地理限制等功能。虎观代理接下来将详解国内IP地址服务的主要功能,并对…

王道c语言-chap13 栈实例

王道c语言-chap13 栈实例 #include <iostream>#define END -1 #define MaxSize 50typedef int ElemType; typedef struct {int data[MaxSize];int top; } SqStack;void InitStack(SqStack &s) {s.top-1; }void PrinfSqStack(SqStack s) {for (int i 0; i < s.to…

什么是布隆过滤器

布隆过滤器&#xff08;Bloom Filter&#xff09;是一种概率型数据结构&#xff0c;用于判断一个元素是否存在于一个集合中。它的主要优点是占用空间少、查询速度快&#xff0c;并且支持高效的插入和查询操作。 布隆过滤器由一个位数组和多个哈希函数构成。初始时&#xff0c;…

八股文三(Spring、Spring Cloud Alibaba)

Spring篇 什么是Spring Spring是个轻量级的框架&#xff0c;他有两大内核分别是IOC、AOPIOC是什么 * 依赖注入和控制反转&#xff0c;它是一种思想&#xff0c;创建对象不是直接new出来&#xff0c;而是交给IOC容器&#xff0c;由容器去创建进行管理&#xff0c;这就是控制反…

解决antd vue 的table列表过宅内容换行和过长有空白列的问题

主要有两个注意点 1、columns数组中保留一个对象不设置宽度&#xff0c;其余都要设置宽度&#xff1b; 2、HTML中scroll要设置为{x: 足够长的固定宽度}&#xff1b; 具体代码如下&#xff1a; <a-tableref"table"size"middle"rowKey"rowSerial&qu…

字符串函数---(1)

字符函数 文章目录 前言1.strlen 的使用和模拟实现2.strcpy 的使用和模拟实现3. strcat 的使用和模拟实现4. strcmp 的使用和模拟实现 前言 上一篇我们学习了字符函数&#xff0c;下来我们学习常见的字符串函数 1.strlen 的使用和模拟实现 size_t strlen(const char *str) 字…

(70min)字节暑假实习二面(已挂)

还没找到工作的小伙伴加油&#xff01; 字节看面评果然名不虚传。。 面试官&#xff1a; 看你一面基础也回答得不好&#xff0c;没事&#xff0c;那我就不问你八股&#xff0c;多问项目吧。 然后开始鞭打项目。 项目使用mq&#xff0c;从背景的&#xff0c;技术选型&#xff0…

DDOS攻击防御介绍

DDOS&#xff1a;分布式拒绝服务攻击 瞬间收到大量数据 总带宽是有限的 合法用户访问的时候&#xff0c;被非法方法流量占据 无法溯源 流量清洗&#xff1a;AntiDdos 边界&#xff0c;旁挂的 备用域名&#xff0c;ip更换 机房会提供解决方案 解决不了问题&#xff0c;就干…

【真实体会】花几百块买ChatGPT4.0账号一年值得吗?

GPT4.0使用体验及价值 性能提升: GPT4比GPT3.5在内容质量和数量上有显著提高&#xff0c;使得知乎等平台的收益增加。 功能丰富: GPT4支持文本、图片、文件问答&#xff0c;而GPT3.5仅支持文本。GPT4内置多种专业工具&#xff08;GPTS&#xff09;&#xff0c;如设计师LOGO的A…

关于我的经历

技能 1 Java基础扎实&#xff0c;具备并发编程经验&#xff0c;熟悉JMM、线程通信线程安全、锁、原子类、阻塞队列、并发容器、线程池原理。清楚并发内容的实现原理。阅读过部分JDK源码。 深入了解JVM虚拟机&#xff1a;内存模型、GC、垃圾回收算法、以及垃圾回收器&#xff0…

Android Studio实现内容丰富的安卓视频管理平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号081 1. 开发环境 android stuido 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.本地视频 3.视频播放 4.收藏功能 5.网路视频 6.个人中心 7.我的收藏 8.浏览历史 3.系…

蓝桥杯第14届模拟赛最大连通分块(dfs)

问题描述(答案148)   小蓝有一个 30 行 60 列的数字矩阵&#xff0c;矩阵中的每个数都是 0 或 1 。 110010000011111110101001001001101010111011011011101001111110 010000000001010001101100000010010110001111100010101100011110 001011101000100011111111111010000010010…