public final class MathUtil {
/**
* 提供精度的比较运算
*
* @param v1
* @param v2
* @return
* 小于、等于或大于时,返回 -1、0 或 1。
*/
public static int compareTo(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(round(v1,10)));
BigDecimal b2 = new BigDecimal(Double.toString(round(v2,10)));
return b1.compareTo(b2);
}
public static int compareTo(double v1, double v2,int decimals) {
v1 = MathUtil.round(v1, 3);
v2 = MathUtil.round(v2, 3);
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.compareTo(b2);
}
/**
*
* 提供精确的加法运算。
*
* @param v1
* 被加数
*
* @param v2
* 加数
*
* @return 两个参数的和
*/
// public static double add(double v1, double v2) {
// BigDecimal b1 = new BigDecimal(Double.toString(v1));
// BigDecimal b2 = new BigDecimal(Double.toString(v2));
// return b1.add(b2).doubleValue();
//
// }
public static double add(double v1, double ... v2) {
BigDecimal b = new BigDecimal(Double.toString(v1));
for(int i=0;i<v2.length;i++){
BigDecimal v3 = new BigDecimal(Double.toString(v2[i]));
b = b.add(v3);
}
return b.doubleValue();
}
/**
*
* 提供精确的减法运算。
*
* @param v1
* 被减数
*
* @param v2
* 减数
*
* @return 两个参数的差
*/
// public static double sub(double v1, double v2) {
// BigDecimal b1 = new BigDecimal(Double.toString(v1));
// BigDecimal b2 = new BigDecimal(Double.toString(v2));
// return b1.subtract(b2).doubleValue();
// }
public static double sub(double v,double...v1) {
BigDecimal b = new BigDecimal(Double.toString(v));
for(int i=0;i<v1.length;i++){
BigDecimal v3 = new BigDecimal(Double.toString(v1[i]));
b = b.subtract(v3);
}
return b.doubleValue();
}
/**
*
* 提供精确的乘法运算。
*
* @param v1
* 被乘数
*
* @param v2
* 乘数
*
* @return 两个参数的积
*/
// public static double mul(double v1, double v2) {
// BigDecimal b1 = new BigDecimal(Double.toString(v1));
// BigDecimal b2 = new BigDecimal(Double.toString(v2));
// return b1.multiply(b2).doubleValue();
// }
public static double mul(double v1, double ... v2) {
BigDecimal b = new BigDecimal(Double.toString(v1));
for(int i=0;i<v2.length;i++){
BigDecimal v3 = new BigDecimal(Double.toString(v2[i]));
b = b.multiply(v3);
}
return b.doubleValue();
}
/**
*
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
*
* 小数点以后10位,以后的数字四舍五入。
*
* @param v1
* 被除数
*
* @param v2
* 除数
*
* @return 两个参数的商
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
/**
*
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
*
* 定精度,以后的数字四舍五入。
*
* @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 zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
//log.info("b1="+b1+",b2="+b2);
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");
if (scale > 4) {
StringBuffer sb = new StringBuffer();
sb.append("0.");
for (int i = 0; i < scale; i++) {
sb.append("0");
}
String str = sb.toString();
return Double.valueOf(new java.text.DecimalFormat(str)
.format(b.divide(one, scale, BigDecimal.ROUND_HALF_UP)
.doubleValue()));
}
return Double.valueOf(new java.text.DecimalFormat("0.0000").format(b
.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue()));
}
}
分享到:
相关推荐
Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...
根据给定的文件信息,我们可以总结出以下关于Java实现加减乘除运算的相关知识点: ### 一、程序结构与组织 这段代码展示了一个简单的Java程序,用于执行基本的算术运算(加法、减法、乘法和除法)。程序通过用户...
标题提到的"加减乘除精确算法"就是为了解决这个问题而设计的。 这个工具类的主要功能是提供对浮点数的精确运算,确保在进行加、减、乘、除操作时不会因为浮点数表示的不精确性而导致错误的结果。通常,这种精确运算...
唔,其实里面就是一个工具类,加减乘除、保留两位小数。一共5个方法。。。emmmm.....为啥分这么高呢。因为宝宝想分想疯了。 附代码,有土豪就打赏打赏,没土豪的直接拿去使吧。 package cn.cisdom.base.utils; ...
`BigDecimal`类提供了加减乘除等运算方法,确保了计算结果的精确性。本文将详细介绍如何使用`BigDecimal`实现加减乘除运算。 首先,`BigDecimal`有多种构造方法,这里主要提及两种: 1. `BigDecimal(double val)`:...
– Java提供了整数和浮点数的数据类型,但是没有提供有理数的类型。 – 由于有理数与整数、浮点数有许多共同特征,并且Number类是数字包装的根类,因此,把有理数类Rational定义为Number类的一个子类是比较合适的。...
标题中的“我做的多则运算支持括号加减乘除”指的是一个计算器程序,它能够处理包含括号的数学表达式,并执行基本的四则运算(加法、减法、乘法和除法)。这个计算器是由Java编程语言实现的,显示了开发者在编程和...
### JavaScript中的精确加减乘除运算 在JavaScript中进行数学计算时,经常会出现精度丢失的问题,尤其是在处理小数运算时尤为明显。这是因为JavaScript中的数字是以双精度浮点数(64位)形式存储的,遵循IEEE 754...
在IT领域,尤其是在编程和计算机科学中,四则运算(加减乘除)是基本的数学操作,它们构成了计算逻辑的基础。"sizeyunsuan.rar_加减乘除 四则运算_四则运算"这个标题暗示了我们将讨论的是如何在编程环境中执行这些...
本篇文章将详细探讨`BigDecimal`在加减乘除运算中的应用及其注意事项。 首先,`BigDecimal`对象的初始化有两种常见方式。一种是直接传入一个数字,如`new BigDecimal(0.005)`,另一种是传入一个字符串,如`new ...
这里我们以Pascal语言为例,探讨如何编写高精度加、减、乘法的源代码。 1. **高精度加法**: 在Pascal程序`gaojing_jia`中,首先定义了一个常量`n`来表示数组的长度,这将决定可以处理的最大位数。然后,定义了两...
例如,他们可能选择了使用大数库,以保证在进行加减乘除时,无论是简单的小数还是复杂的运算,都能得到精确的结果。此外,他们可能还考虑了用户的需求,提供了一定的精度设置选项,让用户可以根据实际需要调整计算的...
这个"aaa.rar"压缩包包含的项目是创建一个Java GUI计算器,支持加、减、乘、除以及混合运算。让我们深入探讨这个项目中的关键知识点。 1. **Java Swing或JavaFX**: 为了构建GUI,开发者可能使用了Java Swing库或者...
Java 中的 BigDecimal 类提供了对浮点数的精确运算,包括加减乘除和四舍五入等操作。在 Java 中,简单类型不能够精确地对浮点数进行运算,因此需要使用 BigDecimal 类来提供精确的浮点数运算。 加法运算 在 Java ...
更高效的方法有舍入除法和迭代除法,这些方法可以逐步逼近精确结果。 6. **无限位数运算**:在计算机中,大数运算可以理论上进行无限位数,只要内存足够。然而,实际应用中通常会受到可用内存的限制。因此,为了...
提供精确的加法运算 提供精确的减法运算 提供精确的乘法运算 精确的除法运算. 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入 提供精确的小数位四舍五入处理 取余数 ...
由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
在IT领域,尤其是在编程和计算机科学中,"加减乘除"是基本的数学运算,它们构成了所有复杂计算的基础。这些运算符在几乎所有的编程语言中都有所体现,包括C,C++,Java,Python,JavaScript等。让我们深入探讨一下...
在Java编程中,当涉及到需要精确数值计算的场景时,我们通常会使用`BigDecimal`类。这是因为`float`和`double`类型虽然适用于科学计算和工程计算,但它们基于二进制浮点运算,不能保证完全精确的结果。而`BigDecimal...
使用BigDecimal进行精确运算的步骤如下: 1. **创建BigDecimal对象**:你可以通过传入String表示的数值来创建BigDecimal对象,或者使用`BigDecimal.valueOf()`静态方法,将基本类型(如double)转换为BigDecimal。...