Java 精确的加减乘除运算

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class UtilArithmetic {
	
	/**
	 * 精确的加法运算
	 * @param d1 被加数
	 * @param d2 加数
	 * @return 两个参数的和
	 */
	public static double add(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.add(b2).doubleValue();
	}
	
	/**
	 * 精确的减法运算
	 * @param d1 被减数
	 * @param d2 减数
	 * @return 两个参数的差
	 */
	public static double sub(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.subtract(b2).doubleValue();
	}
	
	/**
	 * 精确的乘法运算
	 * @param d1 被乘数
	 * @param d2 乘数
	 * @return 两个参数的积
	 */
	public static double mul(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return b1.multiply(b2).doubleValue();
	}
	
	/**
	 * 精确的乘法运算,由scale参数指定精度,以后的数字四舍五入.
	 * @param d1 被乘数
	 * @param d2 乘数
	 * @param scale 需要精确到小数点以后几位
	 * @return 两个参数的积
	 */
	public static double mul2(double d1, double d2, int scale){
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		return round(b1.multiply(b2).doubleValue(), scale);
	}

	/**
	 * (相对)精确的除法运算,当发生除不尽的情况时,
	 * 由scale参数指定精度,以后的数字四舍五入。
	 * @param d1 被除数
	 * @param d2 除数
	 * @param scale 需要精确到小数点以后几位
	 * @return 两个参数的商
	 */
    public static double div(double d1, double d2, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException(
                    "The scale must be a positive integer or zero");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(d1));
        BigDecimal b2 = new BigDecimal(Double.toString(d2));
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    
    /**
     * 判断d1是否大于d2
     * @param d1 实数1
     * @param d2 实数2
     * @return true-大于;false-小于
     */
    public static boolean isDoubleGreater(double d1, double d2) {
		boolean bn = false;
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		if (b1.compareTo(b2) > 0) {
			bn = true;
		} else {
			bn = false;
		}
		return bn;
	}
    
    /**
     * 判断d1是否小于d2
     * @param d1 实数1
     * @param d2 实数2
     * @return true-小于;false-大于
     */
    public static boolean isDoubleLess(double d1, double d2) {
		boolean bn = false;
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		if (b1.compareTo(b2) < 0) {
			bn = true;
		} else {
			bn = false;
		}
		return bn;
	}
    
    /**
     * 判断d1是否等于d2
     * @param d1 实数1
     * @param d2 实数2
     * @return true-等于;false-不等于
     */
    public static boolean isDoubleEqual(double d1, double d2){
    	boolean bn = false;
		BigDecimal b1 = new BigDecimal(Double.toString(d1));
		BigDecimal b2 = new BigDecimal(Double.toString(d2));
		if (b1.compareTo(b2) == 0) {
			bn = true;
		} else {
			bn = false;
		}
		return bn;
    }
    
    /**
     * 小数位四舍五入处理
     * @param d 需要四舍五入的数字
     * @param scale 小数点后保留几位
     * @return 四舍五入后的结果
     */
    public static double round(double d, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException(
                    "The scale must be a positive integer or zero");
        }
        BigDecimal b = new BigDecimal(Double.toString(d));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

}

 

自抗扰控制(ADRC)理论与工程实践:6.1 离散时间ADRC的推导 本文系统阐述了自抗扰控制(ADRC)的离散化方法,重点对比了前向欧拉法和基于零阶保持器(ZOH)的精确离散化两种方法。前向欧拉法计算简单但精度较低,稳定性受采样周期约束;ZOH法精度高但对大采样周期更鲁棒。文章详细推导了跟踪微分器、扩张状态观测器和控制律的离散形式,分析了采样周期选择的关键因素,为ADRC的数字实现提供了理论指导。 阅读详情

相关推荐

Yolov26 在 Rk3588 上的 Rknn Onnx 部署实践(c++)

本文介绍了YOLOv26在RK3588平台的C++推理部署方案。重点包括:1)扩展Ultralytics导出格式,新增RKNN_ONNX专用导出选项;2)重构Detect Head结构,使其更适合RKNN推理;3)提供C++侧后处理实现建议。该方案保留了Ultralytics训练生态,通过优化模型结构输出,将解码等操作移至C++端,充分发挥Rockchip NPU性能。适用于RK3588/RK356x等平台,需配合rknn-toolkit2使用,为YOLOv26的嵌入式部署提供完整解决方案。

qq_64366203的博客 2178

Java基础8----运算符1(数学运算符)

文章目录引言数学运算符四则运算简化运算符自增自减运算符总结 引言 所有的程序开发,都是数据的处理,对于数据的处理,一定会有操作,而这些操作就是运算符。比如说加法运算就要用到运算符"+".而对于运算符,是存在有优先级先后的关系的,很简单的例子,乘法的优先级高于加减法。 对于运算符的优先级问题,个人觉得没必要去背,太多了,只需要技术()的优先级是最高的。所以说通常只需要在表达式中适当的加上括号就好了,而且开发中不应该写比较复杂的运算表达式,否则就是一个很折磨人的情况 public class Demo {

weixin_43776305的博客 746

编译hive-3.1.3(3.0.0)和编译tez-0.10.2适配hadoop-3.3.4以及hadoop-3.2.2(附安装包)

编译hive-3.1.3(3.0.0)和编译tez-0.10.2适配hadoop-3.3.4以及hadoop-3.2.2(附安装包)

2301_77356579的博客 2599

JAVA实现精确的加减乘除

package lc.util; import java.math.BigDecimal; public class MathHelper { private static final int DEF_DIV_SCALE = 10;  private MathHelper() {  }  /**  * 提供精确的加法运算。  *   * @param v1  *            被加数  *...

奋斗 446

铝合金外壳表面处理工艺全解析:从阳极氧化到瓷泳喷涂的7种方法对比

本文全面解析了铝合金外壳的7种主流表面处理工艺,包括阳极氧化、粉末喷涂、瓷泳喷涂等。通过对比其原理、性能、成本与应用场景,为产品设计师和工程师提供了从防护性、装饰性到功能性的立体选型框架,帮助您根据具体需求选择最佳工艺方案。

weixin_29278805的博客 748

别再傻傻分不清了!Anaconda和Miniconda到底选哪个?附保姆级安装与镜像源配置(Windows/Mac)

本文详细解析了Anaconda和Miniconda的核心差异,包括体积、预装内容、系统资源占用等关键维度,并提供了针对不同需求的决策框架。附有Windows和Mac双平台的详细安装与配置指南,帮助用户根据实际需求选择最适合的conda工具,提升开发效率。

weixin_30315723的博客 426

BigDecimal的使用

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

拒绝熬夜啊的博客 968

SAP ABAP MIGO增强实战:自定义页签与字段的完整实现指南

本文详细介绍了SAP ABAP中MIGO增强的实战指南,包括自定义页签与字段的完整实现步骤。通过BADI增强技术,开发者可以快速满足企业个性化需求,如添加供应商批次号等特殊字段。文章涵盖数据存储结构设计、BADI框架实现、核心方法编写及数据持久化方案,帮助用户高效完成MIGO屏幕增强开发。

study的专栏 774

java8新特性和传统使用方法比较,用一个例子来说明同一个方法实现(做“加法”、“减法”、“乘法”)

java8新特性和传统使用方法比较,用一个例子来说明同一个方法实现(做“加法”、“减法”、“乘法”) 1、加法使用的是定义一个来实现父类方法 2、减法是使用匿名内部类 3、乘法是java8新特性 public class Test_01 { interface Algorithm{ int operation(int a, int b); } static class AlgorithmChild implements Algorithm{ @O

weixin_43890876的博客 487

【图形学】Loop细分算法及半边结构实现(C++)

文章目录Loop 细分算法介绍增加新顶点更新旧顶点算法实现半边结构半边结构的表示方法半边结构的构造方法创建所有顶点创建所有面及半边半边结构的使用 Loop 细分 顾名思义,网格细分是将粗糙网格精细化的过程,如下动图。Loop细分是众多网格细分算法的一种,Loop细分仅仅对三角形网格模型有效。值得注意的是,虽然叫Loop细分,但是不能理解为“循环”细分,叫这个名字是因为作者的名字是这个而已。 下面是一个粗糙的兔子模型1000个面,进行3次细分 算法介绍 Loop细分算法主要分两步进行 增加新顶点:增加

wk_119的博客 8067

MICROSAR OS:第一个task是如何执行起来的?

MICROSAR OS是Vector公司开发的符合AUTOSAR OS规范的实时操作系统。本文介绍MICROSAR

humu7733的博客 2573

Java中实现精确的浮点数运算

/** * 精确的浮点数运算 * * @author */ public class Arith { /** 默认除法运算精度 */ private static final int DEF_DIV_SCALE = 10; /** 这个类不能实例化 */ private Arith() { } /** * 提供精确的加法运算。 * @param v1 被加数 * @param v2 加数 * .

博客 2607

vesta软件_分子动力学计算实战:利用 OVITO 软件找弗伦克尔缺陷和位错环分析

今天继续和大家分享这篇纯分子动力学(MD)的 Nat. Comm. 文章(DOI:10.1038/s41467-018-07102-3)。上期推文(从一篇 Nat. Comm. 学习经典分子动力学基本知识和相关软件基本操作 (一)),我们借用该文章的 fig.1 简单介绍了如何用文中所提到的 LAMMPS 软件来实现材料中级联碰撞过程。但是,想完整的展示类似该文章的 fig.1,单纯利用...

weixin_39524842的博客 5983

java加减乘除运算顺序_Java 加减乘除精确运算

css3 calc():css简单的数学运算–加减乘除 注意:CSS3 中calc()关键字+(加)、-(减)运算符必须加空格 多好的东西啊,不用js,一个css就解决了。 .box{ border:1px solid #ddd; width:calc(100% - 100px); background:public final class Math...

weixin_35346761的博客 515

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java BigDecimal实现精确加减乘除运算

最近公司在做一个项目,但是有一个数据类型不会使用,便是 BigDecimal,对于 BigDecimal的加减乘除运算在此引用点我查看原文做一提醒。 第一种:BigDecimal(double val) Translates a double into a BigDecimal. 第二种:BigDecimal(String val) Translates the String repre sent...

weixin_43694038的博客 202

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

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

java float 加法_JAVA 实现精确的加减乘除运算

JAVA在加减乘除运算时易发生精度丢失,达不到我们想要的计算结果;为了能够精确表示、计算浮点数,JAVA提供了BigDecimal类,可以以BigDecimal为基础定义一个Arith工具类,代码如下:import java.math.BigDecimal;publicclassArith{//默认除法运算精度privatestaticfinalintDEF_DIV_SCALE =10;//构造器...

weixin_32147807的博客 2343

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JAVA 实现精确的加减乘除运算

从上面代码的运行结果看出:JAVA在加减乘除运算时易发生精度丢失,达不到我们想要的计算结果;为了能够精确表示、计算浮点数,JAVA提供了BigDecimal类,可以以BigDecimal为基础定义一个Arith工具类,代码如下: import java.math.BigDecimal; public class Arith { //默认除法运算精度 private static fin...

sunkezhen的专栏 2万+

java中 BIgDecimal类用途 BIgDecimal实现精确加减乘除运算

由于浮点数采用二进制系统表示,而二进制无法精确的表示1/10,好比十进制无法精确表示1/3一样。因此,对于很多值浮点数都是采用其能够表示的离目标值近的数来表示,这有可能会在计算中带来不易察觉的误差。为了解决基本数据类型浮点数不能进行精确计算的问题,Java中专门提供了java.math.BigDecimal类,其提供浮点数的精确计算功能。   该工具类需要引入google的一个jar  ,co...

夏安的博客 763

Java的加减乘除工具类,实现精确的加减乘除运算

前言: 很多人都知道,java对于double或者float类型的数字进行直接的加减乘除运行,会出现小数点后面加有很多位数据,导致和我们实际运算结果不符,所以我来给大家提供一个好用的加减乘除工具 话不多说,直接上代码 import java.math.BigDecimal; ​ /** * 版权:微信公众号 android资讯(androidzixun) 版权所有 * 作者:孙鲁班 * 版...

o猫鱼的博客 2106

java 精确计算_java 相对精确的加减乘除运算

import java.math.BigDecimal;public class Arith {/*** 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精* 确的浮点数运算,包括加减乘除和四舍五入。*/private static final int DEF_DIV_SCALE = 10; //这个类不能实例化private Arith(){}/*** 提供精确的加法运算。* ...

weixin_30020909的博客 263

java实现加减乘除法的精确运算

首先来看一个简单的例子: public class TestK { public static void main(String[] args) { double params1 = 1.88d; double params2= 1.89d; System.out.println(params1+params2); } } 肯定有许多人第一反应,结果当然是3.77,事实真...

小鲁班-JAVA开发 2169

java模仿js加减乘除_js加减乘除精确运算方法实例代码

前言因为计算机数字是浮点型,所以在计算过程中通常得到的并不是一个准确的数据,所以在做一些数组运算的时候比较头疼,我们这里就来写一下精确运算的方法首先是加法 (这里以两个数据相加为例)function add(arg1, arg2) {arg1 = arg1.toString(), arg2 = arg2.toString(); // 将传入的数据转化为字符串var arg1Arr = arg1.s...

weixin_40001442的博客 213

java 相对精确的加减乘除运算

import java.math.BigDecimal; public class Arith { /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */ private static final int DEF_DIV_SCALE = 10; //这个类不能实...

放 空 107
上一篇: Java
下一篇: MySql 存储过程 将15位xxxx转化为18位返回
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值