`

BigDecimal常用方法的归类

    博客分类:
  • Java
UP 
阅读更多
public class Arith {
	/** 
	* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 
	* 确的浮点数运算,包括加减乘除和四舍五入。 
	*/ 
	//默认除法运算精度 
	private static final int DEF_DIV_SCALE = 10; 
	    
	//这个类不能实例化 
	private Arith(){ 
	} 

	    /** 
	     * 提供精确的加法运算。 
	     * @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(); 
	    } 
	    /** 
	     * 提供精确的减法运算。 
	     * @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(); 
	    } 
	    /** 
	     * 提供精确的乘法运算。 
	     * @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(); 
	    } 

	    /** 
	     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 
	     * 小数点以后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)); 
	        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(); 
	    } 
	    
	   /** 
	    * 提供精确的类型转换(Float) 
	    * @param v 需要被转换的数字 
	    * @return 返回转换结果 
	    */ 
	    public static float convertsToFloat(double v){ 
	    BigDecimal b = new BigDecimal(v); 
	    return b.floatValue(); 
	    } 
	    
	    /** 
	* 提供精确的类型转换(Int)不进行四舍五入 
	* @param v 需要被转换的数字 
	* @return 返回转换结果 
	*/ 
	public static int convertsToInt(double v){ 
	BigDecimal b = new BigDecimal(v); 
	    return b.intValue(); 
	} 

	/** 
	* 提供精确的类型转换(Long) 
	* @param v 需要被转换的数字 
	* @return 返回转换结果 
	*/ 
	public static long convertsToLong(double v){ 
	BigDecimal b = new BigDecimal(v); 
	    return b.longValue(); 
	} 

	/** 
	* 返回两个数中大的一个值 
	* @param v1 需要被对比的第一个数 
	* @param v2 需要被对比的第二个数 
	* @return 返回两个数中大的一个值 
	*/ 
	public static double returnMax(double v1,double v2){ 
	BigDecimal b1 = new BigDecimal(v1); 
	BigDecimal b2 = new BigDecimal(v2); 
	    return b1.max(b2).doubleValue(); 
	} 

	/** 
	* 返回两个数中小的一个值 
	* @param v1 需要被对比的第一个数 
	* @param v2 需要被对比的第二个数 
	* @return 返回两个数中小的一个值 
	*/ 
	public static double returnMin(double v1,double v2){ 
	BigDecimal b1 = new BigDecimal(v1); 
	BigDecimal b2 = new BigDecimal(v2); 
	    return b1.min(b2).doubleValue(); 
	} 

	/** 
	* 精确对比两个数字 
	* @param v1 需要被对比的第一个数 
	* @param v2 需要被对比的第二个数 
	* @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1 
	*/ 
	public static int compareTo(double v1,double v2){ 
	BigDecimal b1 = new BigDecimal(v1); 
	BigDecimal b2 = new BigDecimal(v2); 
	    return b1.compareTo(b2); 
	} 
}
分享到:
评论

相关推荐

    Java对BigDecimal常用方法的归类 -计算机等级考试-考试吧

    JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.

    Java对BigDecimal常用方法的归类(加减乘除).doc

    Java 中 BigDecimal 的常用方法归类(加减乘除) Java 中的 BigDecimal 类提供了对浮点数的精确运算,包括加减乘除和四舍五入等操作。在 Java 中,简单类型不能够精确地对浮点数进行运算,因此需要使用 BigDecimal ...

    java中BigDecimal的操作方法

    BigDecimal还提供了其他一些方法,如`compareTo()`用于比较两个BigDecimal对象的大小,`scale()`获取小数点后的位数,`stripTrailingZeros()`去除尾部的零,`toPlainString()`返回不包含科学记数法的字符串表示等。...

    BigDecimal工具类.docx

    在BigDecimal工具类中,我们可以看到多个重载的方法,例如add方法和sub方法,这些方法可以根据不同的参数类型和精度需求进行选择。 首先,让我们来看一下add方法。add方法有三种重载形式,分别是add(double,double)...

    BigDecimal的计算

    `BigDecimal` 提供了多种构造方法以及一些静态工厂方法用于创建实例。例如: - `new BigDecimal(String val)`:根据字符串创建一个 `BigDecimal` 实例。 - `BigDecimal.valueOf(long val)`:根据长整型值创建一个 `...

    BigDecimal类

    该类提供了多种构造器和方法,用于创建和操作 BigDecimal 对象。 构造器 BigDecimal 类提供了四种构造器,用于创建不同的 BigDecimal 对象: * `BigDecimal(int)`: 创建一个具有参数所指定整数值的对象。 * `...

    bigdecimal

    `BigDecimal` 类提供了一种可以进行任意精度定点数算术的方法。这意味着它可以存储一个数值的任意小数位数,并且不会丢失精度。这对于处理金融交易或科学计算等需要高精度的情况至关重要。 #### 二、为什么需要...

    javascript版BigDecimal类库

    3. **比较操作**:支持小于(`lt`)、大于(`gt`)、等于(`eq`)等比较方法,确保比较结果的准确性。 4. **舍入模式**:提供了多种舍入策略,如`ROUND_UP`、`ROUND_DOWN`、`ROUND_HALF_UP`等,以适应不同场景下的...

    BigDecimal使用

    下面是关于 BigDecimal 的使用方法和注意事项: 1. 导包:在使用 BigDecimal 之前,需要导入 java.math.BigDecimal 包。 2. 创建 BigDecimal 对象:可以通过多种方式创建 BigDecimal 对象,例如将 double 或 ...

    BigDecimal向Double转换

    综上所述,BigDecimal到Double的转换是一项常用的操作,特别是在处理需要高精度计算的应用程序中。虽然使用doubleValue()方法可以直接完成转换,但是在某些场景下需要注意可能出现的精度损失问题。为了避免这些问题...

    BigDecimal.js.zip

    BigDecimal.js库的核心功能在于提供了大数运算的方法,如加法、减法、乘法、除法,以及比较、取模、平方根等操作。它还支持数字的格式化输出,可以自定义小数位数,以及进行科学计数法的转换。这些方法使得开发者在...

    bigdecimal转integer.docx

    本文将详细介绍三种将 `BigDecimal` 转换为 `Integer` 的方法。 1. 使用 `intValue()` 方法 `intValue()` 方法是最直接的转换方式,它会忽略 `BigDecimal` 中的小数部分,返回整数值。如果 `BigDecimal` 的值超出...

    JS的高精度计算(BigDecimal)

    alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10").subtract(new BigDecimal("3E+10"))); //* alert(new BigDecimal("10").multiply(new BigDecimal("3E+10"))); // / ...

    BigDecimal 总结

    BigDecimal 使用方法小节:包含构造方法及和、差、商、积等运算方式

    java BigDecimal操作

    BigDecimal提供了避免浮点数运算中的精度损失的方法,适用于金融、会计等对精度有严格要求的领域。这篇博文(尽管链接不可用)可能涉及了BigDecimal的基本操作和常见用法。 首先,BigDecimal的构造方式主要有两种:...

    BigDecimal开n次方根

    复杂的BigDecimal计算,需要开方的式子,可输入结果精确位数

    MyEditTextApplication输入框BigDecimal计算价格

    4. **格式化显示**:为了保持价格始终保留小数点后十位,我们可以使用BigDecimal的setScale()方法。它接收两个参数,第一个是保留的小数位数,第二个是舍入模式。之后,我们再将格式化的BigDecimal转换回字符串,并...

    BigDecimal加减乘除计算

    BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法(divide())等基本运算,以及求绝对值(abs())等方法。 1. 初始化 BigDecimal 对象: 初始化 BigDecimal 时,推荐使用字符串参数...

    BigDecimal 加减乘除运算

    Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对...方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

    java-BigInteger-BigDecimal类源码

    2. **精度控制**:`BigDecimal`的精度可以通过构造函数或者`setScale()`方法进行设置,以控制小数部分的位数。 3. **运算符重载**:`BigDecimal`提供了与`BigInteger`类似的算术操作,但还包括了除法、比较和舍入...

Global site tag (gtag.js) - Google Analytics