java bigdecimal计算_java中利用BigDecimal进行精确计算

在项目中有时会使用到比较精确的计算,比如涉及到钱的计算,这个时候不会采用float或者double类型来进行。需要使用bigdeciml类型来进行大数的精确运算。

一、BigDecimal的基本运算——加减乘除绝对值

BigDecimal初始化时尽量全部使用string的构造函数,不然的话可能有出现错误

BigDecimal num1 = new BigDecimal("2");

BigDecimal num2 = new BigDecimal("3");

我们对其进行加、减、乘、除、绝对值的运算其实质就是对Bigdecimal的类的一些方法调用:加法 add()函数、减法subtract()函数、乘法multiply()函数、除法divide()函数、绝对值abs()函数。

//加法

BigDecimal result1 = num1.add(num2);

//减法

BigDecimal result2 = num1.subtract(num2);

//乘法

BigDecimal result3 = num1.multiply(num2);

//除法

BigDecimal result5 = num2.divide(num1,2,BigDecimal.ROUND_HALF_UP);

//绝对值

BigDecimal result4 = num3.abs();

需要注意的是:

(1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。

(2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的。

因为不是所有的浮点数都能够被精确的表示成一个double 类型值,因此它会被表示成与它最接近的double 类型的值。所以在需要精确计算时必须改用传入String的构造方法,这样才能得到更加精确的计算结果。

二、除法divide()参数使用

使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,不然会出现报错。

88b26a5c1f0c32cdcc8b62b346159f21.png

对这八种舍入模式解释如下

1、ROUND_UP:舍入远离零的舍入模式,在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1),注意,此舍入模式始终不会减少计算值的大小。

2、ROUND_DOWN:接近零的舍入模式。在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。注意,此舍入模式始终不会增加计算值的大小。

3、ROUND_CEILING:接近正无穷大的舍入模式。如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同。

注意,此舍入模式始终不会减少计算值。

4、ROUND_FLOOR:接近负无穷大的舍入模式。如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同。

注意,此舍入模式始终不会增加计算值。

5、ROUND_HALF_UP:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。

6、ROUND_HALF_DOWN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。

7、ROUND_HALF_EVEN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。如果前一位为奇数,则入位,否则舍去。

以下例子为保留小数点1位,那么这种舍入方式下的结果。1.15>1.2 1.25>1.2

8、ROUND_UNNECESSARY:断言请求的操作具有精确的结果,因此不需要舍入。如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

BigDecimal类型的数据如何做绝对值和相除求百分比 在上述示例代码中,我们首先创建了两个BigDecimal对象number1和number2,分别表示要操作的数据。然后,我们使用abs()方法求number1的绝对值,并使用divide()方法将number1除以number2,然后将结果乘以100,得到百分比。在示例代码中,我们使用了divide()方法的参数4表示保留小数点后四位,使用BigDecimal.ROUND_HALF_UP舍入模式进行舍入。在Java中,可以使用BigDecimal类进行精确的数值计算,包括求绝对值和计算百分比。 阅读详情

相关推荐

Java编程中的static类成员与BigDecimal精确计算

本文深入探讨了Java编程中的static类成员和BigDecimal类的使用。static类成员允许我们跟踪特定类的对象数量,并通过静态方法访问这些成员,而无需创建类的实例。此外,文章还介绍了BigDecimal类在精确货币计算中的应用,并展示了如何使用NumberFormat类进行货币格式化。

weixin_30598047的博客 348

java BigDecimal 常用计算方法

这些方法都返回一个新的 BigDecimal 对象作为计算结果,原始的 BigDecimal 对象不会被修改。此外,BigDecimal 还提供了其他常用的方法,如比较、取绝对值、四舍五入等,详细的使用方法可以参考 Java 官方文档。在 Java 中,使用 BigDecimal 类进行精确的浮点数计算是一种常见的做法。

道友 4367

ModelSim 2020.4破解失败?手把手教你解决‘Unable to checkout viewer license‘报错(附环境变量配置)

本文针对ModelSim 2020.4启动时遇到的‘Unable to checkout viewer license’报错,提供了从理解许可证机制到分步修复的完整指南。文章深入解析了viewer license与图形用户界面(GUI)的关系,并详细说明了通过生成有效许可证文件、精准配置系统环境变量及替换关键文件来解决图形界面启动失败的问题,帮助用户彻底修复并理解其背后的逻辑。

k6l7m8n9的博客 990

java bigdecimal运算_Java中BigDecimal的基本运算(详解)

BigDecimal一共有4个够造方法,让来看看其中比较常用的两种用法:第一种:BigDecimal(double val)Translates a double into a BigDecimal.第二种:BigDecimal(String val)Translates the String repre sentation of a BigDecimal into a BigDecimal.使用...

weixin_42318812的博客 2361

爬虫实战:抖音视频搜索数据爬虫开发实战(附完整Python源码)

【代码】抖音视频搜索数据爬虫开发实战(附完整Python源码)

weixin_61226361的博客 3596

CP2102 USB 转 UART 模块 PCB 设计项目

不幸的是,我的笔记本电脑只有 USB 端口,所以我需要在 USB 端口和 UART 接口之间进行转换。PCB 布局将足够小,因此我们不一定需要高速布线 USB 线路,但我们将在此将其作为一个简单的示例来实现,以展示如何在这种类型的电路板上实现它。相反,我们只使用屏幕左侧的电路。在这里,我们利用对之间的间距和到 L1 上的铜灌注的距离将差分阻抗设置为目标值。初始布局分为两个部分:USB 连接器和 USB 线路的 TVS 二极管放置在电路板左侧,带有二极管 D4 和 D5 的引脚接头放置在电路板右侧。

jkh920184196的博客 2401

Java中BigDecimal的使用:加减乘除、四舍五入、比较大小、资金统计

Java在 java.math 包中提供的API类 BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象

pan_junbiao的博客 1万+

C/C++跳动的爱心(完整代码)

C语言实现跳动的爱心的完整代码。

AIGC 5842

java bigdecimal计算_java精确计算之BigDecimal

Java中的计算主要有double,float,int,long,BigDecimal1、float和double主要用户科学计算和工程计算,它们执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而设计的。然而它们并没有提供完全精确的结果,所以不应该被用于需要精确计算的场合。eg:double double_price1 = 1.03;double double_price2...

weixin_39955938的博客 282

zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS

vitis2023.1直接支持W25Q256JVEQ。

FPGA艺术家的博客 676

学Simulink——基于新型动力与推进系统的场景实例:混合动力无人机的续航能力优化

通过本次 Simulink 仿真,你已掌握:✅混合动力系统架构设计✅内燃机、电机、电池联合建模✅三种能量管理策略(规则型、功率跟随、优化型)✅续航能力仿真与对比分析✅参数调优与优化方法核心收获混合动力是突破续航瓶颈的有效路径能量管理策略(EMS)决定系统效率电池SOC管理是关键Simulink 支持复杂多能源系统的协同仿真掌握混合动力无人机技术,你将具备设计长航时巡检机、应急通信平台、边境巡逻系统的能力。

xiaoheshang_123的博客 100

Java精确计算小数(BigDecimal)

Java精确计算小数 Java在计算浮点数的时候,由于二进制无法精确表示0.1的值(就好比十进制无法精确表示1/3一样),所以一般会对小数格式化处理. 但是如果涉及到金钱的项目,一点点误差都不能有,必须使用精确运算的时候,就可以使用BigDecimal方法计算. 但是在使用中还需要注意一个问题: //直接使用double类型数据进行运算 System.out.println(0.05+0.01); //使用BigDecimal的double参数的构造器 BigDecimal bd1 = new B

康康的博客 1163

Python爬虫实战:公共资源交易平台招标数据采集实战 - 从零构建企业情报系统(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 1288

Java使用BigDecimal进行精确计算

其实java的float只能用来进行科学计算或工程计算,在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。           在使用BigDecimal类来进行计算的时候,主要分为以下步骤:               1、用float或者double变量构建BigDecimal对象。              2、通过调用BigDecim

Dove_Knowledge的博客 742

海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7,yolov8(1)

海思SS928,SS926以及Hi3519dv500,hi3516dv500下的yolov7模型部署推理系列

Littro Innovations 3083

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BigDecimal (Java 中用于精确计算的类)

是 Java 中用于精确计算的类,位于java.math包中。它提供了精确的浮点数运算,适用于需要高精度计算的场景,比如金融计算。以下是一些常用的。

q322359的博客 445

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java中精确的数字计算类BigDecimal

在日常开放当中需要我们计算数字,利率。通常Java的做法是使用Math相关的API。但是,这样做是不够精确的,由于float和double不能进行计算,如果强行进行计算会使得计算不准确。造成难以挽回的损失。为了弥补这一个缺点Java提供了BigDecimal这个类来解决。在使用这个类的时候需要将double转成String进行计算。为了方便,下面我写了几个常用的计算方法,当然也可以自...

diebing0439的博客 235

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java金额比较大小_JAVA中精确计算金额BigDecimal

packagecom.chauvet.utils;importjava.math.BigDecimal;importjava.text.DecimalFormat;importjava.text.NumberFormat;/***** 金额** 如果需要精确计算,必须用String来够造BigDecimal! !!** Java里面的商业计算,不能用float和double,因为他们无法 进行精确...

weixin_35554226的博客 4013

使用BigDecimal对象进行Java浮点数精确计算

浮点数精确计算 胜利油田三流合一项目中一直存在一个问题,就是每次报表统计的物资金额和实际的金额要差那么几分钱,和实际金额不一致,让客户觉得总是不那么舒服,原因是因为我们使用java的浮点类型double来定义物资金额,并且在报表统计中我们经常要进行一些运算,但Java中浮点数(double、float)的计算是非精确计算,请看下面一个例子:     System.out.println(0.0

Central-Perk的专栏 1483

java中计算精准,Java中使用BigDecimal进行精确运算

首先我们先来看如下代码示例:运行结果如下。0.069999999999999990.5800000000000001401.499999999999940.30310000000000004你认为你看错了,但结果却是是这样的。问题在哪里呢?原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,...

weixin_36432451的博客 306

java 深度解析 BigDecimal:精确计算的利器

是不可变的,频繁运算会产生大量临时对象。是 Java 中处理精确计算的强大工具,正确使用可以避免许多数值计算的陷阱。问题,不适合用于金融、货币等需要高精度计算的场景。存储未缩放的值(unscaled value)和一个。类型由于采用 IEEE 754 浮点数标准,存在。这种存储方式避免了浮点数的二进制近似问题。是 Java 提供的用于。

hi星尘的博客 635

【java】BigDecimal大数值与精确计算

一、大数值 java.math包中的两个类 整数运算 BigInteger 浮点数运算 BigDecimal (1)BigInteger 代码示例: import java.math.*; public class BigInteger { public static void main(String[] args) { BigInteger b1 = new BigInteg...

linbomm的博客 401

Java中double类型计算不精确的解决办法(BigDecimal)

2008-10-06 10:33 http://hi.baidu.com/jjcc2001/blog/item/ec32bbca48fac740f21fe79e.html 解决方法:写一个Arith类: http://www.linuxidc.com/Linux/2011-06/37232.htm 首先我们先用一般的情况进行下double类型的计算。 System.o

5757

Java中精确的计算小数--BigDecimal

测试代码如下: BigDecimal a = new BigDecimal("2.3333333345"); BigDecimal b = new BigDecimal("5.45433"); double c = 2.3333333345; double d = 5.45433; // 加法:add System.out.println("a.add(b) = " + a.add(b));

少弋弋的专栏 1885

Java BigDecimal进行精确计算

前言 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。 1. BigDecimal的四则运算 package com.hom...

weixin_30344131的博客 89

掌握Java BigDecimal:精确计算的终极指南

在日常工作中遇到需要一些精度的计算,此时用到了BigDecimal类,本文章记录学习其使用方法1.引言在工作中需要用到double

2603_96171993的博客 363
上一篇: java properties更新_java更新properties文件怎么刷新
下一篇: java web ssh2_JAVAWEB贵美网上商城完整项目源码(SSH2)
杨军创业观察室
码龄8年 34粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值