Java中使用BigDecimal进行精确运算
发布时间 - 2026-01-10 23:12:09 点击率:次首先我们先来看如下代码示例:
public class Test_1 {
public static void main(String[] args) {
System.out.println(0.06+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(303.1/1000);
}
}
运行结果如下。
0.06999999999999999
0.5800000000000001
401.49999999999994
0.30310000000000004
你认为你看错了,但结果却是是这样的。问题在哪里呢?原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999。浮点数的值实际上是由一个特定的数学公式计算得到的。
其实java的float只能用来进行科学计算或工程计算,在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。
在使用BigDecimal类来进行计算的时候,主要分为以下步骤:
1、用float或者double变量构建BigDecimal对象。
2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。
3、把BigDecimal对象转换成float,double,int等类型。
一般来说,可以使用BigDecimal的构造方法或者静态方法的valueOf()方法把基本类型的变量构建成BigDecimal对象。
BigDecimal b1 = new BigDecimal(Double.toString(0.48)); BigDecimal b2 = BigDecimal.valueOf(0.48);
对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。
public BigDecimal add(BigDecimal value); //加法 public BigDecimal subtract(BigDecimal value); //减法 public BigDecimal multiply(BigDecimal value); //乘法 public BigDecimal divide(BigDecimal value); //除法
进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法。
下面是一个工具类,该工具类提供加,减,乘,除运算。
public class Arith {
/**
* 提供精确加法计算的add方法
* @param value1 被加数
* @param value2 加数
* @return 两个参数的和
*/
public static double add(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.add(b2).doubleValue();
}
/**
* 提供精确减法运算的sub方法
* @param value1 被减数
* @param value2 减数
* @return 两个参数的差
*/
public static double sub(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确乘法运算的mul方法
* @param value1 被乘数
* @param value2 乘数
* @return 两个参数的积
*/
public static double mul(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供精确的除法运算方法div
* @param value1 被除数
* @param value2 除数
* @param scale 精确范围
* @return 两个参数的商
* @throws IllegalAccessException
*/
public static double div(double value1,double value2,int scale) throws IllegalAccessException{
//如果精确范围小于0,抛出异常信息
if(scale<0){
throw new IllegalAccessException("精确度不能小于0");
}
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.divide(b2, scale).doubleValue();
}
}
以上所述是小编给大家介绍的Java中使用BigDecimal进行精确运算,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# bigdecimal运算
# Java中使用BigDecimal进行浮点数运算
# Java BigDecimal使用及基本运算(推荐)
# Java使用BigDecimal进行运算封装的实际案例
# Java中BigDecimal的基本运算(详解)
# 【Java】BigDecimal实现加减乘除运算代码
# Java使用BigDecimal精确运算浮点数
# 浮点数
# 可以使用
# 转换成
# 小编
# 是一个
# 也会
# 却是
# 在此
# 是这样
# 是由
# 你看
# 错了
# 给大家
# 没有办法
# 你认为
# 所述
# 抛出
# 给我留言
# 感谢大家
# 疑问请
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何用低价快速搭建高质量网站?
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
再谈Python中的字符串与字符编码(推荐)
用v-html解决Vue.js渲染中html标签不被解析的问题
Laravel如何创建自定义中间件?(Middleware代码示例)
Laravel如何实现用户注册和登录?(Auth脚手架指南)
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
如何安全更换建站之星模板并保留数据?
三星网站视频制作教程下载,三星w23网页如何全屏?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
怎么用AI帮你设计一套个性化的手机App图标?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
如何快速搭建支持数据库操作的智能建站平台?
JavaScript如何实现路由_前端路由原理是什么
如何在 React 中条件性地遍历数组并渲染元素
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
linux top下的 minerd 木马清除方法
想要更高端的建设网站,这些原则一定要坚持!
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何快速使用云服务器搭建个人网站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
如何基于云服务器快速搭建网站及云盘系统?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
如何实现建站之星域名转发设置?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
javascript读取文本节点方法小结
如何在万网主机上快速搭建网站?
如何选择可靠的免备案建站服务器?
浅谈javascript alert和confirm的美化
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Python图片处理进阶教程_Pillow滤镜与图像增强
如何快速重置建站主机并恢复默认配置?
Bootstrap整体框架之JavaScript插件架构
如何正确选择百度移动适配建站域名?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何在建站主机中优化服务器配置?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何快速上传自定义模板至建站之星?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
香港服务器租用每月最低只需15元?
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
详解jQuery停止动画——stop()方法的使用
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
简历在线制作网站免费版,如何创建个人简历?
如何在服务器上三步完成建站并提升流量?

