Java中Double数据类型的数学运算工具类

java Double 进行加减乘除 double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型 Double 工具类 package org.fh.util; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; /** * dou... 阅读详情

package com.framework.util;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**

 * @author ZhangKaiXuan
 * 
 * @date 2019年11月1日
 * 
 */
public class CalculatorUtils {

	/**
	 * double 相加
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double sum(Double d1, Double d2) {
		BigDecimal bd1 = new BigDecimal(d1);
		BigDecimal bd2 = new BigDecimal(d2);
		return bd1.add(bd2).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	/**
	 * double 相减
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double sub(Double d1, Double d2) {
		BigDecimal bd1 = new BigDecimal(d1);
		BigDecimal bd2 = new BigDecimal(d2);
		return bd1.subtract(bd2).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();

	}

	/**
	 * double 乘法
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double mul(Double d1, Double d2) {
		BigDecimal bd1 = new BigDecimal(d1);
		BigDecimal bd2 = new BigDecimal(d2);
		return bd1.multiply(bd2).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	/**
	 * double 除法
	 * 
	 * @param d1
	 * @param d2
	 * @param scale 四舍五入 小数点位数
	 * @return
	 */
	public static double div(Double d1, Double d2, int scale) {

		BigDecimal bd1 = new BigDecimal(d1);
		BigDecimal bd2 = new BigDecimal(d2);
		return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	/**
	 * @Title: format_B @Description: TODO( ) @param: @param
	 * num @param: @return @return: String @throws
	 */
	public static String format_B(double num) {
		DecimalFormat df = new DecimalFormat("0.00%");
		return df.format(num);
	}

	/**
     * 四舍五入
     * 
     * @param value需要四舍五入的数字
     * @param scale小数点后保留五位小数
     * @return
     */
	public static Double round(Double value, int scale) {
		BigDecimal bd = new BigDecimal(value);
		bd = bd.setScale(scale, 5);
		double d = bd.doubleValue();
		bd = null;
		return d;
	}

	/**
     * 四舍五入
     * 
     * @param value需要四舍五入的数字
     * @param scale小数点后保留两位小数
     * @return
     */
	public static double round2Up(double d) {
		BigDecimal bg = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP);
		return bg.doubleValue();
	}


	/**
     * 判断 a 与 b 是否相等
     * 
     * @param a
     * @param b
     * @return a==b 返回true, a!=b 返回false
     */
    public static boolean equal(double a, double b) {
        BigDecimal v1 = BigDecimal.valueOf(a);
        BigDecimal v2 = BigDecimal.valueOf(b);
        if (v1.compareTo(v2) == 0) {
            return true;
        }
        return false;
    }
 
 
    /**
     * 判断 a 是否大于等于 b
     * 
     * @param a
     * @param b
     * @return a>=b 返回true, a<b 返回false
     */
    public static boolean greaterThanOrEqualTo(double a, double b) {
        BigDecimal v1 = BigDecimal.valueOf(a);
        BigDecimal v2 = BigDecimal.valueOf(b);
        if (v1.compareTo(v2) >= 0) {
            return true;
        }
        return false;
    }
 
    /**
     * 判断 a 是否大于 b
     * 
     * @param a
     * @param b
     * @return a>b 返回true, a<=b 返回 false
     */
    public static boolean bigger(double a, double b) {
        BigDecimal v1 = BigDecimal.valueOf(a);
        BigDecimal v2 = BigDecimal.valueOf(b);
        if (v1.compareTo(v2) == 1) {
            return true;
        }
        return false;
    }
 
    /**
     * 判断 a 是否小于 b
     * 
     * @param a
     * @param b
     * @return a<b 返回true, a>=b 返回 false
     */
    public static boolean lessThan(double a, double b) {
        BigDecimal v1 = BigDecimal.valueOf(a);
        BigDecimal v2 = BigDecimal.valueOf(b);
        if (v1.compareTo(v2) == -1) {
            return true;
        }
        return false;
    }


}

java数学计算工具类 double精确的加法算法 double精确的减法算法 相对精确的除法运算,当发生除不尽的情况时,精确到小数点以后指定精度(scale),再往后的数字四舍五入:1.01。相对精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位:1.0088495575。String/double/bigdecimal保留n位小数:1.24。对精确的除法运算,当发生除不尽的。精确的乘法算法:1.2882。double精确的加法算法。double精确的减法算法。精确的加法算法:2.27。精确的减法算法:0.01。java数学计算工具类。 阅读详情

相关推荐

Java 加减乘除工具类(解决精度损失问题)

唔,其实里面就是一个工具类,加减乘除、保留两位小数。一共5个方法。。。emmmm.....为啥分这么高呢。因为宝宝想分想疯了。 附代码,有土豪就打赏打赏,没土豪的直接拿去使吧。 package cn.cisdom.base.utils; import java.math.BigDecimal; import java.text.DecimalFormat; public class Calculation { public static final DecimalFormat df = new DecimalFormat("######0.00"); /** * @methodName format2point * @desc 保留两位小数点 * @param value * @return java.lang.String * @author xm * @create 2018/6/7 12:03 **/ public static String format2point(Number value) { return df.format(value); } public static Double add(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue())); BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue())); return b1.add(b2).doubleValue(); } /** * 提供精确的减法运算。 * * @param value1 * 减数 * @param value2 * 被减数 * @return 两个参数的差 */ public static Double sub(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue())); BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue())); return b1.subtract(b2).doubleValue(); } /** * 提供精确的乘法运算。 * * @param value1 * 被乘数 * @param value2 * 乘数 * @return 两个参数的积 */ public static Double mul(Number value1, Number value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue())); BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue())); return b1.multiply(b2).doubleValue(); } /** * 提供精确的除法运算。 * * @param value1 * 除数 * @param value2 * 被除数 * @return 除数/被除数 */ public static Double div(Number value1, Number value2) { //MathContext mc = new MathContext(2, RoundingMode.HALF_DOWN);//精度为2,舍入模式为大于0.5进1,否则舍弃 BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue())); BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue())); return b1.divide(b2).doubleValue(); } public static void main(String[] args) { Double aDouble=Calculation.add(56.9, 1.67); System.out.println(aDouble); Double bDouble=Calculation.sub(99.2,aDouble); System.out.println(bDouble); } }

Java Double类型数据运算工具(BigDecimal)

说明:Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+...

多哥仁慈的骆驼 810

自动驾驶仿真 (四)—— 基于PreScan与Simulink的AEB系统多场景验证

本文详细介绍了基于PreScan与Simulink的AEB系统多场景验证方法,涵盖标准场景搭建、复杂工况扩展及控制策略优化。通过仿真技术,显著降低测试成本并提升场景覆盖率,有效解决实车测试中的痛点问题。特别适用于自动驾驶领域的AEB系统开发与验证。

weixin_28273593的博客 248

Java中处理double、float、Double、Float、BigDecimal、String类型对象的小数工具类,保留小数位或取整,是否四舍五入

由于每次都要处理小数,很麻烦,所以封装一个工具类来去处理,这个工具类专门用来处理小数位的,就比如我是double、float、Double、Float、BigDecimal、String这些。工具类提供三个参数,一个是泛型的value用来传入任何类型的(double、float、Double、Float、BigDecimal、String)值,一个是保留多少位scale用来截取多少位,一个是是否需要四舍五入判断指标isHalf用来判断是否需要四舍五入,如我value是double类型1.336,scale是

番茄Salad 565

手把手教你用AirSim生成无人机训练数据集:RGB/深度图/分割图全攻略

本文详细介绍了如何使用AirSim仿真插件在UE4环境中生成无人机训练数据集,涵盖RGB、深度图和分割图等多种模态数据的采集与处理。通过实战指南,读者可以掌握环境配置、多模态数据采集、自动化流程设计及数据后处理等关键技术,为无人机视觉算法开发提供高质量训练数据。

weixin_29008805的博客 449

单细胞数据互转实战:从Scanpy的h5ad到Seurat对象的四种高效方法

本文针对单细胞数据分析中Scanpy的h5ad格式与Seurat对象互转的常见难题,详细对比了SeuratDisk、anndataR、schard和sceasy四种高效转换方法。文章从实战出发,剖析了每种方法的原理、操作流程、优缺点及避坑指南,并提供了清晰的选型策略,帮助用户根据数据特点选择最佳方案,实现跨平台数据的无缝衔接。

weixin_29099217的博客 446

Double数值精准计算的工具类

public class DoubleUtils { /** * 提供精确的加法运算。 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add(double v1,double v2){ BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal

weixin_39093006的博客 323

Labview调用C++ dll之字符串数组传递

做项目的时候碰到了一个需求,有一个复杂的运算,用labview实现非常的麻烦,但是如果用C++实现,就会灵活很多。尝试着采用Labview调用C++编写的动态链接库方式解决,兼顾Labview的便利和C++的灵活性。 运算好说,主要难点是Labview与C++之间的数据对应关系,因为我最后的结果是既有字符串又有数字,对于单纯的数字来说,直接通过调用数组的方式就能解决,这里主要记录一下字符串数组...

bgbgx的博客 6807

java计算Doble工具类

java计算Doble工具类 package com.wx.util; import java.math.BigDecimal; import java.util.List; public class ArithUtils { /** * 提供精确加法计算的add方法 * * @param value1 被加数 * @param value2 ...

星哲最开心 316

【隐私计算】从本地加法到在线乘法:Beaver Triple如何重塑算术秘密分享的运算效率

本文深入探讨了Beaver Triple在算术秘密分享中的关键作用,显著提升了隐私计算中的乘法运算效率。通过对比加法与乘法的实现差异,详细解析了Beaver Triple的预处理机制和在线计算优化,展示了其在减少通信量和计算时间方面的革命性突破。

weixin_29227585的博客 436

小红书直播弹幕采集

本文主要介绍小红书直播间弹幕的采集,便于进行直播数据监控与直播数据进行分析。

tdl320721的博客 2540

java 数学计算库_数学计算工具类

[java]代码库/*** Description: [数字计算工具类]* @version 1.0*/public class MathUtils {/** 一百的常量 */private static final int HUNDRED_NUMBER = 100;/** 默认保留小数位数 */private static final int DEFAULT_DECIMAL_NUMBER = 2...

weixin_32512933的博客 1173

51智能小车(双轮)

前几天接了个小单子,是一个基于51单品机的作品,发现自己对小车的认识还是不太🆗。也算是完成了任了的;欢迎各位小伙伴来多多交流,大家一起进步。最后有需要单片机课程设计的小伙伴滴滴我哦(有偿)。企鹅:2397746994。

qq_56992543的博客 2346

java基础学习四

一。java中的基本数据类型    二。double和float精度不准的问题          double和float本身确实存在某种缺陷,不能用于精确计算。     解决办法: 用java.math.BigDecimal,通过BigDecimal类可以解决上述问题          ArithUtil是自定义的一个工具类,封装了加减乘除操作。 packageex; ...

weixin_30551963的博客 72

MTK-Android12开机应用自启需求-自定义原生Launcher3 主界面布局图标

MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标。添加一个属性定义即可,如下:这里自定义一个属性目的是为了在加载Launcher3启动时候从属性获取需要自启动应用的包名,可以扩展动态替换 自启动包名。这里有两种方案,要么在Launcher3里面实现,要么在系统服务里面在开机时候启动第三方一次。这里强烈建议在Launcher3中去实现,体验效果更好。// 第一步:定义属性,// 第二步:在onCreate 方法中获取属性并启动应用。

十年饮冰,难凉热血 1376

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java当中float以及double数据类型的掌握

java当中默认声明的小数是double类型的;  * double d=4.0  * 如果声明:  * float x = 4.0则会报错,需要如下写法:  * float x = 4.0f或者float x = (float)4.0  * 其中4.0f后面的f只是为了区别double,并不代表任何数字上的意义  *   * float 内存分配4个字节

小宇宙的小怪兽 1551

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

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

java double类型数据操作工具类

packagecom.hojo.avengers.lib.utils; importjava.math.BigDecimal; /** * *@ClassName:DoubleOperationUtils *@Description:封装double类型数据+-*%等运...

chuanqiu4983的博客 303

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java BigDecimal工具类,计算double数据防止精度丢失

Java BigDecimal工具类,计算double数据防止精度丢失 package m.system.util; import java.math.BigDecimal; public class BigDecimalUtil { /** * double类型精确相加 v1+v2 * @param v1 * @param v2 * @return */ publi...

qq_38003243的博客 406

string转double java_Java String转double

Java String转double1 Java String转double的介绍我们可以使用Double.parseDouble() 方法在Java中将String转换为double。2Java String转double的应用场景如果必须对包含双数的字符串执行数学运算,则通常使用它。每当我们从文本字段或文本区域获取数据时,输入的数据都会作为字符串接收。如果输入的数据为double,则需要将字...

weixin_42697475的博客 2万+

double 不能为 null !double和Double不一样?

Double和double是两个不同类型!?有什么区别?

m0_74624144的博客 1010

Double类型丢失精度的两种解决方案

继续使用Double类型 其实只要在计算时使用封装的工具类,继续使用Double类型精度也不会丢失;转换为BigDecimal时,构造函数采用String那一个。 package com.sugarppig.general.utils; import com.sugarppig.common.exception.GeneralException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Arr

ChinaLiaoTian的博客 2570

Double类型加减乘除运算

public class MathDoubleUtil { private static final int DEF_DIV_SCALE = 10; /** * 格式化,double保留两位小数 * @param d2 * @return */ public static String format(Double d2) { ...

Motejia的博客 1万+

Java double相加,数字精度问题

Java double相加,数字精度问题;两个数相加会多出很多位,进度问题:1.7999999999999998,诸如此类;这种问题一般是单纯的将double相加:0.12+0.6所出现 方法实例: public static void main(String[] arg){ double d1 = 1.2; double d2 = 0.6; ...

你当像鸟飞往你的山~~ 1786

Java double 改负数

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Java 中如何将 double 类型的数改为负数 在程序开发中,数据的表示和转换是非常常见的需求。在 Java 中,double 类型用于表示带有小数点的浮点数。当我们需要将一个 dou...

weixin_41429874的博客 178

java中Double的运算

骑士李四记录: 如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(1...

pengli 3599

java比较double_如何在Java中比较两个double值?

如何在Java中比较两个double值?Java中两个double值的简单比较会产生一些问题。 让我们考虑以下Java中的简单代码段。package doublecomparision;final public class DoubleComparision{public static void main(String[] args){double a = 1.000001;double b = ...

weixin_31448735的博客 3053
上一篇: Java中Double数据类型 保留两位小数的方法
下一篇: No identifier specified for entity: XXXX 错误
Monika、
博客等级 码龄7年 16粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monika、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值