对象中BigDecimal值转换为JSON中精度丢失(出错)的问题解决方法

2023-11-14

代码如下

1.定义一个包含BigDecimal类型的类

@Data
public class User {
    private String  name;
    private BigDecimal salary;
}

2.分别使用两种方法将对象转换为字符串


public class Demo {
    public static void main(String[] args) {
        User user = new User();
        user.setName("张三");
        user.setSalary(new BigDecimal(150.01));
        System.out.println("com.alibaba.fastjson转换结果"+com.alibaba.fastjson.JSONObject.toJSONString(user));
        System.out.println("net.sf.json.转换结果:"+net.sf.json.JSONObject.fromObject(user).toString());
    }
}

运行结果如下:

 

 我们可以明显的观察到数字在转换成字符串的时候精度发生了很大的变化,至于为什么会发生这种情况,有兴趣的人可以自行百度一下,我这边说一下如何解决这种方法

我们在定义这个类的时候需要对BigDecimal类型的值进行一下处理

处理方法:

public class User {
    private String  name;
    private BigDecimal salary;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getSalary() {
        return salary.setScale(2,BigDecimal.ROUND_HALF_UP);
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }
}

 

最关键的部分:对BigDecimal保留相应的小数位setScale(2,BigDecimal.ROUND_HALF_UP);,我这边是保留了2位小数

这边保留方法是四舍五入的,可以参考相关博客

之后我们再看下转换后的结果:

 这边我没有使用别的JSON转换,所以不知道别的json在转换成字符串时候是否也可以用上面的方法解决该类的问题,结果不一致的小伙伴可以反馈一下哈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对象中BigDecimal值转换为JSON中精度丢失(出错)的问题解决方法 的相关文章

  • 机器人操作系统ROS(22)ROS安装opencv

    应该是再安装ROS时 已经默认安装opencv 但是有时候需要的环境不同 下面两种方法 第一种是 再安装一个版本 两个版本共存 第二种是 删除再安装 还有一种是Linux下安装OpenCV4 适用于Ubuntu等 还有一个知乎版本用树莓派4
  • Python——os.mkdir()在指定路径下创建文件夹 + 路径的连接理解

    引子 我在用路径连接函数 os path join 时发现 其连接的各级目录必须首先存在 才可以连接 也即是说连接的各文件夹必须首先存在 因为个各层级的目录以文件夹的形式表现出来 基于此 我开始研究如何先在指定路径下创建文件夹 1 在指定路
  • linux批量替换文件夹中所有文件内容

    记录一下 以防自己忘了 替换单个文件 sed i s 旧字符串 新字符串 g 文件名 替换整行 sed i 旧字符串 c 新字符串 文件名 替换文件夹中所有文件内容 sed i s 旧字符串 新字符串 g grep 旧字符串 rl 目录
  • MIPI协议之CSI2和DPHY

    目录 1 概论 2 CSI2协议 2 1 CSI 2数据帧格式 3 D PHY 3 1 数据通道模块的工作流程图 3 2 数据通道模块状态图 1 概论 MIPI协议 Moblie Industry Process Interface 移动行
  • Android 如何修改按钮默认的讨厌的蓝紫色

    1 在设置好按钮背景时 发现钮颜色始终没有改变 2 原来是默认主题themes的问题 在这里修改主题即可 3 找到 res values themes themes xml 双击打开themes xml文件 4 修改parent内容为 Th
  • Linux编程语言glob函数,linux glob函数man页与实例

    Linux Programmer s Manual NAME glob globfree find pathnames matching a pattern free memory from glob SYNOPSIS include in
  • 如何选择IO调度器

    概述 不格文学网 m vbuge com 由于对multi quque的IO调度算法不太熟悉 为了避免误人子弟 本文暂时只会介绍如何选择single queue的IO调度算法 等将来对multi queue有充分认识后再补充 如果不清楚什么
  • redhat激活管理

    redhat激活管理 redhat激活管理常用命令 查看 激活 删除订阅 刷新 redhat激活管理常用命令 https blog csdn net xixihahalelehehe article details 79108442 查看
  • pyqt5_1 Qt Designer组件讲解

    一 布局 Vertical Layout 纵向布局 Horizontal Layout 横向布局 Grid Layout 栅格布局 QGridLayout 网格布局 是将窗口分割成行和列的网络来进行排列 Form Layout 表单布局 在
  • 关于U盘中“文件夹EXE病毒”的解决方案

    笔者在使用U盘时 无意之间发现U盘所有文件的后缀名均变为 exe 经过查询相关资料 确认这是一种病毒 文件夹EXE病毒 一 简介 木马名称 Worm Win32 AutoRun soq 当把U盘插入到一台电脑后 U盘内生成了以原文件夹名字命
  • Ubuntu 安装 Oracle JDK

    1 写在前面 本文主要介绍如何在Ubuntu系统下安装Oracle JDK 2 环境准备 2 1 下载JDK 2 1 1 浏览器下载安装包 进入虚拟机浏览器访问官网地址 http www oracle com technetwork jav
  • 一分钟带你快速认识S参数

    S 参数是SI与RF领域工程师必备的基础知识 大家很容易从网络或书本上找到S Y Z参数的说明 但即使如此 在相关领域打滚多年的人 仍然可能还是会被一些问题困扰着 你懂S参数吗 不懂的话 那么请继续往下看 S参数简介 S参数 也就是散射参数
  • GitLab的使用 和 Git 、 Github、Gitlab的区别

    一 git github gitlab的区别 百度相关内容得到的理解 二 git最基本作用 版本控制 三 有集成了git的GIT安装包 github和gitlab都使用git该版本控制系统 来实现对代码的管理 所以 原先怎么用git操作gi
  • obs窗口捕获不到ppt白屏_如何用obs进行电脑直播,学会这篇,直播不再难

    很多人想在头条或者西瓜视频直播 除了用手机直播外 还可以用电脑进行直播 只要用obs进行简单设置即可达到要求 可以直播ppt 直播ps等 1 下载并安装好obs软件 点击文件 设置 在设置的窗口中 找到输出 一般输出的设置默认就好 无需更改
  • 微信浮窗是不是服务器保存,微信浮窗,真能解决小程序留存难题吗?

    小程序浮窗 到底有多大能量 作者丨Suvi 上个月 微信更新了7 0 5版本 对浮窗功能做了全新升级 支持最多同时添加5个项目 不含QQ音乐 并首次支持添加小程序 新版浮窗一上线 便被寄予厚望 各方将之解读为挽救公众号阅读量 提高小程序留存
  • 【8】测试用例设计-边界值法

    对于软件来说 错误经常发生在输入或输出值的关键点 边界值分析法是对软件的输入或输出边界进行测试的一种方法 它的所有测试用例都是在等价类的边界处设计 边界值分析需要选择一个或多个元素 以便等价类的每个边界都经过一次测试 与仅仅关注输入条件 输
  • QT+CUDA混合编程BUG(一)

    QT CUDA混合编程BUG 一 在QT中进行CUDA编程 CUDA库与其他外部库冲突 debug失败 问题描述 在QT中进行CUDA编程 单独使用CUDA编程时并未出现难以解决的问题 但当我讲CUDA处理的部分 加入已搭建完毕一项较大的Q
  • LeetCode第 292 题:Nim游戏(C++)

    292 Nim 游戏 力扣 LeetCode 剩下4块的时候 如果轮到你 那么你必输 先简单推一下 如果第n块的时候轮到你 n 5 必胜 拿1块 n 6 必胜 拿2块 n 7 必胜 拿3块 n 8 必败 无论我拿几块 对方都可以将我逼到4的
  • 基于Lasagne实现限制玻尔兹曼机(RBM)

    RBM理论部分大家看懂这个图片就差不多了 Lasagne写代码首先要确定层与层 RBM 正向反向过程可以分别当作一个层 权值矩阵互为转置即可 代码 coding utf 8 data format is bc01 written by Ph

随机推荐

  • 【Shell编程】Shell中Bash变量-用户自定义变量

    目录 系列文章 Bash变量 用户自定义变量 变量的命名规则 变量分类 本地变量 实例 系列文章 Shell编程 Shell基本概述与脚本执行方式 Shell编程 Shell中Bash基本功能 Bash变量 用户自定义变量 变量的命名规则
  • 前端跨域解决方案

    目录 同源政策 跨域 常见的跨域场景 跨域解决方案 1 JSONP跨域 1 原生JS实现 2 jquery Ajax实现 3 Vue axios实现 后端node js代码 2 跨域资源共享 CORS 1 简单请求 2 非简单请求 3 CO
  • 满载大模型技能干货的AI Day活动全新来袭

    AI大模型时代 创造力才是第一生产力 满载大模型技能干货的AI Day主题活动全新来袭 丰富有趣的Workshop即将空降你的学校 帮助大家掌握前沿技能 拓展技术视野 迈进AIGC的大门 打造属于你的AI应用 满足不同阶段的学习实践需求 无
  • AD10软件打不开,停留在开机界面上

    解决办法 把AD10的缓存文件都删掉 C Users Administrator AppData Roaming Altium下的文件都删掉
  • 二分图最大完美匹配

    嗯 想不通 就是二分之后的点 寻找左边的点和右边的点的保证两条边的顶点不相同的最大边数 匈牙利算法 O mn 左边寻找和右边相邻的边 如果右边还没有和左边进行连线 那么匹配成功 如果右边已经进行连线 那么考虑左边是否能更改连线 换一个右边
  • Qt总结——菜单隐藏

    我们在使用QMenu的时候经常会在其中添加子菜单以及action QMenu中的隐藏禁用的操作是针对action的 所以直接操作action是没有问题的可以想要的效果 但是menu不行 因为不是action类型的 QAction actio
  • 元组:(tuple)

    1 元组 tuple tuple 相比较列表list 元组和列表都是一种有序集合 0 2 3 5 9 第一个元素即是第一个存入的元素 按照存放顺序存储 元组的访问 格式 元组名 下标 tuple4 1 2 3 4 5 print tuple
  • python从视频信息中提取音频,只用了三行代码...

    在做多媒体素材的时候 往往需要从视频中提取音频信息 在python中提供了moviepy这个非标准库 可以很快的帮助我们完成这个操作 算上导入moviepy非标准库的操作只需要三行代码完成 喜欢记得收藏 关注 点赞 1 单文件处理 将mov
  • Java 性能优化的 50 个细节

    前言 在JAVA程序中 性能问题的大部分原因并不在于JAVA语言 而是程序本身 养成良好的编码习惯非常重要 能够显著地提升程序性能 1 尽量在合适的场合使用单例 使用单例可以减轻加载的负担 缩短加载的时间 提高加载的效率 但并不是所有地方都
  • MySQL 表的 添加、更新与删除数据

    添加数据 为表中的所有 部分字段 添加数据 可以添加部分 也可以全部添加 INSERT INTO 表名称 字段名 VALUES 数据类型对应的 值 指定的字段 或 全部字段添加的数据 INSERT INTO 表名称 SET 字段名 值 同时
  • 用python实现时间序列自相关图(acf)、偏自相关图(pacf)

    自相关图是一个平面二维坐标悬垂线图 横坐标表示延迟阶数 纵坐标表示自相关系数 偏自相关图跟自相关图类似 横坐标表示延迟阶数 纵坐标表示偏自相关系数 自相关图与偏自相关图的python代码实现 from statsmodels graphic
  • 一个对象赋予另一个对象

    它的两个对象 n1 和n2 是在 main 里创建的 每个对象中的i 值都赋予了一个不 同的值 随后 将 n2 赋给n1 而且 n1 发生改变 当给n1 i赋值时 n2 i也会随着改变 这是由于无论n1 还是n2 都包含了相同的句柄 它指向
  • stm32cubeide驱动LCD1602显示屏

    STM32驱动LCD1602 硬件连接关系 STM32CUBEIDE设置 代码 项目设置 最后运行 硬件连接关系 LCD1602 STM32 VCC VCC GND GND VO VCC 滑动变阻 RS PB1 RW PB2 BOOT1 E
  • 上海国际区块链赋能传统产业峰会-王伟:道道人才链启动

    上海国际区块链赋能传统产业峰会 王伟 道道人才链启动 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 万赢信采编 在当前 区块链成为全球技术发展的前沿阵地 谋定研究 对话中国经济和信息化 区块链将加速 可信
  • QPixmap的尺寸设置

    问题描述 在控件上使用QPixmap时 希望能重新修改图片的分辨率 而不是使用图片的原始分辨率 解决方法 主要有两种方法 设置控件的尺寸 例如QPixmap被传入一个QLabel控件时 可以通过设置QLabel控件的尺寸来对QPixmap进
  • C++11 noexcept 关键字用法学习

    最近学习和写了一个 mint 的板子 其中用到了 noexcept 关键字 对这个关键字不太熟悉 便学习一下刘毅学长的文章 C 98 中的异常规范 Exception Specification 傲芙小说网 https www 3973 i
  • kaggle冠军代码汇总

    https www cnblogs com rw rongwei p 6509146 html
  • linux 查看进程和内存使用情况,深入理解linux下查看进程内存的使用情况

    本篇文章是对linux下查看进程内存的使用情况进行了详细的分析介绍 需要的朋友参考下 动态查看一个进程的内存使用 复制代码 代码如下 1 top命令 top d 1 p pid pid 设置为delay 1s 默认是delay 3s 如果想
  • 为什么C++内置类型的局部变量不能默认初始化

    C 有个人所共知的特性 就是它的内置类型是无法在局部区域内默认初始化的 如下所示 int k int main int m cout lt
  • 对象中BigDecimal值转换为JSON中精度丢失(出错)的问题解决方法

    代码如下 1 定义一个包含BigDecimal类型的类 Data public class User private String name private BigDecimal salary 2 分别使用两种方法将对象转换为字符串 pub