Java中精确的数字计算类BigDecimal

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

public class CalculateUtils {
    /**
     * 加法
     *
     * @param var1
     * @param var2
     * @return
     */
    public static double add(double var1, double var2) {
        BigDecimal b1 = new BigDecimal(Double.toString(var1));
        BigDecimal b2 = new BigDecimal(Double.toString(var2));
        return b1.add(b2).doubleValue();

    }

    /**
     * 减法
     *
     * @param var1
     * @param var2
     * @return
     */

    public static double sub(double var1, double var2) {
        BigDecimal b1 = new BigDecimal(Double.toString(var1));
        BigDecimal b2 = new BigDecimal(Double.toString(var2));
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 乘法
     *
     * @param var1
     * @param var2
     * @return
     */
    public static double mul(double var1, double var2) {
        BigDecimal b1 = new BigDecimal(Double.toString(var1));
        BigDecimal b2 = new BigDecimal(Double.toString(var2));
        return b1.multiply(b2).doubleValue();
    }

    /**
     * 除法
     *
     * @param v1
     * @param v2
     * @param scale 精度,到小数点后几位
     * @return
     */

    public static double div(double v1, double v2, int scale) {

        if (scale < 0) {

            throw new IllegalArgumentException("The scale must be a positive integer or ");

        }
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

    }

    /**
     * 四舍五入
     * @param v
     * @param scale 精确位数
     * @return
     */
    public static double round(double v, int scale) {

        if (scale < 0) {

            throw new IllegalArgumentException("The scale must be a positive integer or zero");

        }

        BigDecimal b = new BigDecimal(Double.toString(v));

        BigDecimal one = new BigDecimal("1");

        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

    }



}

 

         欢迎关注我的微信公众号

转载于:https://www.cnblogs.com/lovelyYakir/p/6290299.html

【BigDecimal】大数的精确计算你还在用Double? 实际开发必须会的BigDecimal 阅读详情

相关推荐

掌握Android中的BigDecimal精确数字处理

本文还有配套的精品资源,点击获取 简介:在Android开发中,正确处理数字的精度是一个常见需求,尤其是涉及货币或科学计算的场景。使用Java的BigDecimal类,可以精确地进行浮点数运算并控制尾数精度显示,本案例将展示如何应用BigDecimal来实现这一目标。通过分析BigDecimal的构造函数、setScale()方法以及toPlainString()方法,我们...

weixin_31749299的博客 1408

Hutool 数字工具-NumberUtil使用(加减乘除,保留小数,格式化数字,是否为数字,随机数,整数列表,阶乘,平方根,最大公约数和最小公倍数,进制转换,比较大小,去除多余的0)

数字工具针对数学运算做工具性封装。 1加减乘除 //针对数字类型做加法 NumberUtil.add(1,2);//3 // 针对数字类型做减法 NumberUtil.sub(1,1);//0 //针对数字类型做乘法 NumberUtil.mul(1,3);//3 //针对数字类型做除法,并提供重载方法用于规定除不尽的情况下保留小数位数和舍弃方式。 NumberUtil.d.

旭东怪的博客 6万+

NumberUtil.java

提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入;提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。

Hutool 数字工具-NumberUtil使用 加减乘除,保留小数,格式化数字,是否为数字,随机数,整数列表,阶乘,平方根,最大公约数和最小公倍数,进制转换,比较大小,去除多余的0

数字工具针对数学运算做工具性封装。

weixin_43580824的博客 7789

java 格式化数字 NumberUtil

1、格式化小数 123456.123 -> 123,456.12 2、格式化整数 123456 -> 123,456

VASP+Multiwfn+VMD静电势计算与可视化全流程解析

静电势是表征分子与材料表面电荷分布的关键物理量,它通过求解泊松方程,将电子密度与原子核电荷在空间中的贡献结合起来,直观揭示体系的电子富集与缺失区域。这一性质在理解化学反应活性、分子间相互作用(如氢键、卤键)以及材料表面性质方面具有重要价值。在计算材料科学与量子化学领域,基于第一性原理计算获得高精度电子结构数据后,如何将其转化为可直观分析的静电势图,是连接理论计算与物理解释的关键技术环节。本文聚焦于构建一条高效、可控的端到端工作流,详细解析如何利用VASP进行高精度电子密度计算,通过专业波函数分析软件Mult

weixin_33733810的博客 430

BigDecimal高精度运算

当两个整数进行除法运算时,直接相除会丢弃小数部分,得到一个整数结果。然而,通过使用BigDecimal类或工具类方法(如 Hutool 的),可以保留小数部分并得到一个精确的BigDecimal结果。这种方法特别适用于需要高精度计算的场景,例如财务、科学计算等。

cyt涛的博客 1431

做量化没有实时数据怎么行?我找到一个超级好用的Python库,速度还贼快!

今天咱们介绍了 pytdx 这个神奇的库,重点包括:✅ 安装 pytdx✅ 连接 TDX 服务器✅ 获取实时行情数据✅ 获取 K 线数据✅ 获取分笔成交数据总之,pytdx 是一个速度快、免费、易用的量化利器,适合 A 股量化交易的同学们使用。如果你还在为数据发愁,赶紧试试吧!🚀顺手再看就是对花姐最大的支持,期待你的关注。

奔跑的蜗牛 5722

java中各类型加、减、乘、除和保留小数点方法之NumberUtil

java中各类型加、减、乘、除和保留小数点方法之NumberUtil

qq_34295227的博客 2135

Ubuntu Server 24.04 安装 (超详细)

本文介绍最小化安装 Ubuntu Server的详细过程。

炀炀的专栏 1万+

从零开始:用ZEMAX设计双高斯照相物镜的完整流程(附55mm焦距实例)

本文详细介绍了使用ZEMAX设计双高斯照相物镜的完整流程,特别针对55mm焦距实例进行了深入解析。从初始结构选择、参数设置到优化策略和像质分析,逐步指导读者掌握这一经典光学设计方法。通过具体实例展示了如何实现卓越的像差校正,适用于35mm相机标准镜头等应用场景。

onion的博客 705

Java中精确的数字计算类 BigDecimal

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

风暴计划 955

QGIS效率提升神器:qgis_mcp插件+VSCode联合工作流配置全解析

本文详细解析了如何通过配置qgis_mcp插件与VSCode的联合工作流,实现语音控制和代码自动化来大幅提升QGIS操作效率。该方案将自然语言交互与现代编辑器生态结合,为地理信息专业人士构建了智能、高效的全新工作模式,彻底改变传统GIS操作方式。

weixin_29228203的博客 189

BigDecimal数字精确计算类

java.math.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 Big...

longflang的博客 134

【工控基础】UVW平台踩坑

1 每个轴按顺时针或逆时针走一个距离,就是旋转。 2 图中W动,U轴V轴不动,就是X方向的平移 3 图中U轴V轴同时动,X不动,就是Y方向的平移。

songhuangong123的博客 6947

从零到一构建一个智能爬虫 Agent 完整教程

本文将打造一个具备自主决策、动态解析、反反爬、持久化能力的智能爬虫 Agent

数据知道的博客 4793

BigDecimal(公式精确计算)+(精度丢失问题)

Java使用BigDecimal(公式精确计算)+(精度丢失问题) 两部分。 详细请看正文

. 8442

LangChain .NET:C#开发者构建AI应用的RAG框架与实战指南

大语言模型(LLM)作为当前人工智能的核心技术,通过深度学习海量文本数据,掌握了强大的语言理解和生成能力。其原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系,从而实现对复杂语义的建模。这一技术价值在于能够将非结构化的自然语言转化为可计算、可推理的表示,为各类智能应用提供认知基础。在实际工程实践中,LLM常被应用于构建检索增强生成(RAG)系统和AI智能体(Agent)。RAG通过结合外部知识库检索与LLM生成,有效提升了问答的准确性和事实性,是构建企业知识库、智能客服等场景的关键技术。

weixin_42538175的博客 705

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

在项目中有时会使用到比较精确的计算,比如涉及到钱的计算,这个时候不会采用float或者double类型来进行。需要使用bigdeciml类型来进行大数的精确运算。一、BigDecimal的基本运算——加减乘除绝对值BigDecimal初始化时尽量全部使用string的构造函数,不然的话可能有出现错误BigDecimal num1 = new BigDecimal("2");BigDecimal n...

weixin_35275922的博客 3124

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java精确除法运算(BigDecimal)

一、BigDecimal介绍 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算.   其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类.   BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDeci......

qq_37080455的博客 7万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java之BigDecimal 大数字精确运算

一、BigDecimal概述 ​ Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和F...

#Crazy的博客 3046

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java中精确计算的一个类用BigDecimal

<!--google_ad_client = "pub-1926348199765453";/* 728x90, 创建于 08-12-3 */google_ad_slot = "0385006797";google_ad_width = 728;google_ad_height = 90;//--><script type="text/javascript"sr

Sonic 的技术博客 1867

java BigDecimal 浮点数精确计算

更加精确使用浮点数: 在计算机中所有的数字都是使用二进制进行存储的,而二进制无法精确的表示所有小数,所以使用基本的数据类型进行小数运算会有一些误差,比如有某件商品的价格是1.1元,而顾客现有的金额是2元。 public class main { public static void main(String[] args) { System.out.print(2-1.1); } }...

weixin_42265250的博客 1031
上一篇: 手把手教你给RecycleView添加头布局和尾布局
下一篇: RecycleView实现侧滑删除item
diebing0439
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值