BigDecimal正确使用姿势

文章目录

  • BigDecimal
      • 1.0BigDecimal减法
      • 1.1 BigDecimal除法
      • 1.2 BigDecimal累加
      • 1.3 BigDecimal转为double,并累加
      • Bigdecimal转Double并四舍五入保留两位小数
      • 1.4 BigDecimalFormat使用
      • 1.5 BigDecimal转为String
      • BigDecimal转为String展示
      • 1.6 小数点处理setScale:https://blog.csdn.net/ahwr24/article/details/7048724
      • 1.7 比较大小

BigDecimal

https://blog.csdn.net/qq_35539512/article/details/79484044?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link

1.0BigDecimal减法

     public static BigDecimal safeSubtract(BigDecimal num1, BigDecimal num2) {if (num1 == null) {num1 = BigDecimal.ZERO;}if (num2 == null) {num2 = BigDecimal.ZERO;}return num1.subtract(num2);}

1.1 BigDecimal除法

踩坑:divide整出除不尽问题

BigDecimal b1 = new BigDecimal(1);
BigDecimal b2 = new BigDecimal(3);
BigDecimal divide1 = b1.divide(b2, 3, RoundingMode.DOWN);
System.out.println(divide1);

1.2 BigDecimal累加

add踩坑

DO中属性priority进行累加
BigDecimal priorityTotal = doList.stream().map(DO::getPriority).reduce(BigDecimal.ZERO, BigDecimal::add);
对集合中DTO类中saleCount属性值进行累加,获取GMV
BigDecimal gmv = BigDecimal.ZERO;
for (DTO dto : dtoList) {gmv = gmv.add(sellOutWarnSkuDTO.getSaleCount());
}

1.3 BigDecimal转为double,并累加

dtoList.stream().mapToDouble(dto -> DTO.getSalePcs().doubleValue()).sum();

Bigdecimal转Double并四舍五入保留两位小数

public static Double bigDecimal2double2Reserve(BigDecimal bigDecimal) {return bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();}

1.4 BigDecimalFormat使用

public static void main(String[]args){double pi = 3.1415927; //圆周率//取一位整数System.out.println(new DecimalFormat("0").format(pi));   //3//取一位整数和两位小数System.out.println(new DecimalFormat("0.00").format(pi)); //3.14//取两位整数和三位小数,整数不足部分以0填补。System.out.println(new DecimalFormat("00.000").format(pi));// 03.142//取所有整数部分System.out.println(new DecimalFormat("#").format(pi));   //3//以百分比方式计数,并取两位小数System.out.println(new DecimalFormat("#.##%").format(pi)); //314.16%long c =299792458;  //光速//显示为科学计数法,并取五位小数System.out.println(new DecimalFormat("#.#####E0").format(c)); //2.99792E8//显示为两位整数的科学计数法,并取四位小数System.out.println(new DecimalFormat("00.####E0").format(c)); //29.9792E7//每三位以逗号进行分隔。System.out.println(new DecimalFormat(",###").format(c));   //299,792,458//将格式嵌入文本System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c));}

1.5 BigDecimal转为String

BigDecimal gmv = xxxxx;
DecimalFormat format = new DecimalFormat("这里的pattern格式可以参考1.4中的BigDecimalFormat使用");
String s = format.format(gmv);

BigDecimal转为String展示

  • 最好不要用doble展示,因为可能出现科学计算法的展示形式1.6E
  • 补充:可以参考1.4 BigDecimalFormat使用

不要科学计算法,且不要无用的小数位

        BigDecimal pcs = BigDecimal.valueOf(5454545453.1415926);String plainString = pcs.stripTrailingZeros().toPlainString();
        BigDecimal decimal = new BigDecimal(123456789.2345);double doubleValue = decimal.doubleValue();String res = decimal.stripTrailingZeros().toPlainString();System.out.println(decimal);System.out.println(doubleValue);System.out.println(res);
123456789.23450000584125518798828125
1.234567892345E8
123456789.23450000584125518798828125//保留两位小数BigDecimal newBigDecimal = decimal.setScale(2, BigDecimal.ROUND_HALF_UP);double newDoubleValue = newBigDecimal.doubleValue();String newRes = newBigDecimal.stripTrailingZeros().toPlainString();System.out.println(newBigDecimal);System.out.println(newDoubleValue);System.out.println(newRes);
123456789.23
1.2345678923E8
123456789.23

1.6 小数点处理setScale:https://blog.csdn.net/ahwr24/article/details/7048724

1.7 比较大小

【强制】 BigDecimal需要使用compareTo()

因为BigDecimal的equals()还会比对精度,2.0与2.00不一致。

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

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

相关文章

Stable Diffusion 参数介绍及用法

大模型 CheckPoint 介绍 作用:定调了作图风格,可以理解为指挥者 安装路径:models/Stable-diffusion 推荐: AnythingV5Ink_v32Ink.safetensors cuteyukimixAdorable_midchapter2.safetensors manmaruMix_v10.safetensors counterf…

Python 图片处理笔记

import numpy as np import cv2 import os import matplotlib.pyplot as plt# 去除黑边框 def remove_the_blackborder(image):image cv2.imread(image) #读取图片img cv2.medianBlur(image, 5) #中值滤波,去除黑色边际中可能含有的噪声干扰#medianBlur( Inp…

学习路之api --接口文档和常见的状态码

一、接口文档 https://www.showdoc.com.cn/ 二、常见的状态码 200-299:表示服务器已经成功接收请求,并完成整个处理过程。 200:OK,表示请求成功; 201:Created 已创建。成功请求并创建了新的资源&#xf…

买卖股票的最佳时机

一、题目。 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置…

2023年云南省职业院校技能大赛中职组“网络安全”赛项样题

2023年云南省职业院校技能大赛 中职组“网络安全”赛项样题 一、竞赛时间 总计:180分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 数据库加固 A-3 服务加固SSH\VSFTPD A-4 防火墙策…

RPC和HTTP调用的区别

RPC(Remote Procedure Call)和HTTP调用都是用于实现远程通信的方法,但它们有一些重要的区别: 通信协议: RPC:RPC通常使用自定义的二进制协议或者序列化协议(如Protobuf、Thrift)来进行通信。这些…

php预约系统源码 网上预约小程序开发源码 整套系统搭建让在线预约更便捷

随着互联网技术的发展,越来越多的服务行业开始通过网上预约系统来实现便捷的客户管理和服务提供。PHP预约系统源码作为一种成熟的技术方案,可以帮助商家快速搭建自己的预约系统,提高工作效率,优化客户体验。 分享一个php预约系统…

线段树维护矩阵:0920T4

正解为文艺平衡树维护矩阵&#xff0c;但我打不动&#xff0c;所以打了部分分 首先可以写成dp形式 然后又可以写成矩阵形式 然后矩阵显然支持结合律 所以可以拿线段树维护 #include<bits/stdc.h> using namespace std; #define int long long inline int read(){int…

常见的排序算法及时间空间复杂度

排序算法是计算机科学中的基本算法之一&#xff0c;它用于将一组数据按照某种顺序进行排列。下面是一些常见的排序算法&#xff0c;以及它们的思想和时间空间复杂度&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢…

Python日期处理库:掌握时间的艺术

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 日期和时间在计算机编程…

nginx重写与防盗链

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之 一&#xff0c;用于实现URL的重写&#xff0c;URL…

《中国数字经济发展指数报告(2023年)》发布

导读 国家统计局《数字经济及其核心产业统计分类(2021)》首次对数字经济及其核心产业统计分类做出详细说明。然而&#xff0c;由于数字经济内涵外延的不断丰富&#xff0c;区域数字经济发展的量化评估仍在持续发展的过程中&#xff0c;以量化模型方式能够更加客观全面反映新时…

flash attention的CUDA编程和二维线程块实现softmax

本文参考了链接添加链接描述 flash attention介绍 flash attention的介绍可以参考论文:FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness,具体的数学公式参考下面这个图片:其中注意关于矩阵S有两个维度,softmax的操作维度是dim=1,用pytorc…

【HarmonyOS】元服务卡片router实现跳转到指定页面

【关键字】 元服务卡片、router跳转不同页面 【写在前面】 本篇文章主要介绍开发元服务卡片时&#xff0c;如何实现从卡片中点击事件跳转到指定的应用内页面功能。此处以JS UI开发服务卡片为例&#xff0c;JS卡片支持组件设置action&#xff0c;包括router事件和message事件&…

蒙特卡洛方法的数学基础-1

蒙特卡洛方法的数学基础-1 概率论 Bayes 公式 常用分布 Binominal Distribution Poisson Distribution Gaussian Distribution Exponential Distribution Uniform Distribution 大数定理 均匀概率分布随机地取N个数xi &#xff0c;函数值之和的算术平均收敛于函数的期望值 …

rsyslog-日志管理 logrotate-日志轮转

日志的管理的方式&#xff0c;以及怎么自己写一个管理日志的小脚本&#xff0c;其实也不能算脚本 管理日志的进程 rsyslogd&#xff1a;绝大部分日志记录&#xff0c;和系统操作有关&#xff0c;安全&#xff0c;认证sshd,su&#xff0c;计划任务at,cron… httpd/nginx/mysql: …

2. 两数相加

2. 两数相加 迭代 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode h1 l1, h2 l2, dummy new ListNode(-1, h1), d dummy;int carry 0, sum 0;while(h1 ! null && h2 ! null){sum h1.val h2.val carry;carry sum / 10…

基于nRF7002-DK的NFC功能切换系统(nRF Connect SDK+NFC)

目录 项目介绍硬件介绍项目设计开发环境及工程目录总体流程图硬件初始化NFC功能实现文本记录安卓应用打开按键切换功能 功能展示项目总结 &#x1f449; 【Funpack2-6】基于nRF7002-DK的NFC功能切换系统 &#x1f449; Github: EmbeddedCamerata/nRF7002-DK-nfc-function-switc…

ADS放大器模型参数含义

ADS放大器模型参数含义 S21 : Forward Transmission Coefficient, use xj*y, polar(x,y), dbpolar(x,y) for complex value 增益&#xff0c;X是增益大小&#xff0c;y是相位 S11 : Forward Reflection Coefficient, use xj*y, polar(x,y), dbpolar(x,y), vswrpolar(x,y) for …

新手学习:ArcGIS对shp文件裁剪

新手学习&#xff1a;ArcGIS对SHP文件裁剪 新手学习 记录每个步骤&#xff0c;因为有很多控件可能刚开始还不熟悉&#xff0c;根本不知道在哪里&#xff0c;所以写的比较详细。 1.添加要裁剪的shp文件 2.查看shp文件的地理坐标系 双击shp文件&#xff0c;就可以查看shp文件的…