`

java 提供高精度的运算支持 BigDecimal 备忘笔记

阅读更多
package com.util;

import java.math.BigDecimal;

/**
 * 提供高精度的运算支持.
 * 所以函数以double为参数类型,兼容 int 与 float.
 * @author dylan_xu
 * @date Mar 11, 2012
 * @since JDK1.6
 * @see com.util.NumericUtils
 */
public class NumericUtils {

	private NumericUtils() {

	}
	/**
	 * 判断是否是大于零的Integer整数
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param obj
	 * @return
	 */
	public static boolean isGTIntegerZero(Object obj){
		return ((obj!=null)&&(obj instanceof Integer)&&(((Integer)obj).intValue()>0));
	}
	
	/**
	 * 判断是否是大于零的Long整数
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param obj
	 * @return
	 */
	public static boolean isGTLongZero(Object obj){
		return ((obj!=null)&&(obj instanceof Long)&&(((Long)obj).longValue()>0));
	}
	
	/**
	 * 精确的加法运算
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static double add(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.add(b2).doubleValue();
	}
	
	/**
	 * 精确的减法运算
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v1 被减数
	 * @param v2 减数
	 * @return
	 */
	public static double subtract(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.subtract(b2).doubleValue();
	}
	
	/**
	 * 提供精确的乘法运算
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static double multiply(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.multiply(b2).doubleValue();
	}
	
	/**
	 * 提供精确的乘法运算,并对运算结果截位.
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v1
	 * @param v2
	 * @param scale 运算结果小数后精确的位数
	 * @return
	 */
	public static double multiply(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(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.multiply(b2).setScale(scale,BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	/**
	 * 提供(相对)精确的除法运算
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static double divide(double v1, double v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.divide(b2).doubleValue();
	}

	/**
	 * 提供(相对)精确的除法运算.
	 * 由scale参数指定精度,以后的数字四舍五入.
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v1 被除数
	 * @param v2 除数
	 * @param scale 表示表示需要精确到小数点以后几位
	 * @return
	 */
	public static double divide(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(v1);
		BigDecimal b2 = new BigDecimal(v2);
		return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 提供精确的小数位四舍五入处理.
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @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(v);
		return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 提供精确的类型转换(Float) 
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v 需要被转换的数字
	 * @return 返回转换结果 
	*/
	public static float convertsToFloat(double v){
		BigDecimal b = new BigDecimal(v);
		return b.floatValue();
	}
	
	/**
	 * 提供精确的类型转换(Int)不进行四舍五入
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v需要被转换的数字
	 * @return 返回转换结果
	 */
	public static int convertsToInt(double v){
		BigDecimal b = new BigDecimal(v);
		return b.intValue();
	}
	
	/**
	 * 提供精确的类型转换(Long) 
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @param v 需要被转换的数字
	 * @return 返回转换结果
	 */
	public static long convertsToLong(double v){
		BigDecimal b = new BigDecimal(v);
		return b.longValue();
	}
	/**
	 * 返回两个数中大的一个值
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @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();
	}
	/**
	 * 返回两个数中大的一个值
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @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();
	}
	
	/**
	 * 精确对比两个数字 
	 * @author dylan_xu
	 * @date Mar 11, 2012
	 * @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);
	}
	
	public static void main(String[] args) {
		double v1 = 3.565;
		double v2 = 5.345;
		
		System.out.println(convertsToLong(v1));
		System.out.println(convertsToFloat(v2));
		System.out.println(convertsToInt(v1));
		System.out.println(round(v1, 1));
		System.out.println(NumericUtils.multiply(v1, v2));
	}
	
}
分享到:
评论

相关推荐

    JS的高精度计算(BigDecimal)

    你是否因为JS端的小数计算的精度不足而发愁过呢 其实有个不错的资源可以利用。 引用附件的JS,就可以轻松搞定JS的计算问题了。 使用例 &lt;!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+...

    java高精度计算算法与分析

    1. 使用BigDecimal类:BigDecimal类是java中提供的一种高精度计算类,通过设置保留的小数位数来控制计算结果的精度。 2. 设置保留的小数位数:通过setScale()方法设置保留的小数位数,以控制计算结果的精度。 3. ...

    BigDecimal 加减乘除运算

    Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...

    高精度JSBigDecimal运算

    在科学计算中,高精度的BigDecimal运算也能确保实验结果的准确性。 总的来说,高精度JSBigDecimal运算库通过提供高精度的数学运算和控制精度的上下文环境,弥补了JavaScript在处理大数和高精度计算时的不足,使得...

    java BigDecimal操作

    在Java编程语言中,BigDecimal类是用于处理高精度、大范围浮点数的工具,它在需要精确计算的场景下非常关键。BigDecimal提供了避免浮点数运算中的精度损失的方法,适用于金融、会计等对精度有严格要求的领域。这篇...

    java中BigDecimal的操作方法

    在Java编程语言中,BigDecimal是...总之,BigDecimal是Java中处理高精度计算的关键工具,尤其在金融、会计等对精度要求严格的领域。正确理解和使用BigDecimal的方法和策略,能确保程序在进行复杂计算时得出准确的结果。

    Java中BigDecimal的基本运算(详解)

    Java中的BigDecimal是一种高精度的数据类型,它可以用来表示非常大的整数和小数,提供了丰富的数学运算功能。下面我们将对Java中BigDecimal的基本运算进行详细的介绍。 构造方法 BigDecimal有四种构造方法,但是...

    BigDecimal加减乘除计算

    BigDecimal 类在 Java 中被设计用来处理高精度的浮点数运算,主要应用于财务、金融等领域,因为这些场景中对精度要求非常高。BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法...

    java-BigInteger-BigDecimal类源码

    总之,`BigInteger`和`BigDecimal`是Java中处理大整数和高精度浮点数的关键工具,它们的源代码为我们提供了深入学习和定制这两个类的机会。理解并掌握这些类的使用能极大地提升在处理数学计算时的精确性和效率。

    大数操作(BigIntger、BigDecimal)笔记

    031110_【第11章:Java常用类库】_大数操作(BigIntger、BigDecimal)笔记

    Java SE程序 BigDecimal类

    Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE...

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    而`BigDecimal`类提供了对任意精度的十进制数的支持,确保了商业计算中的准确性。 ### `BigDecimal`的基本操作 1. **加法**:通过调用`add()`方法完成两个`BigDecimal`对象的相加。例如: ```java BigDecimal ...

    javascript版BigDecimal类库

    JavaScript版的`BigDecimal`类库是基于Java原版`BigDecimal`的改编,旨在提供与Java版本相似的功能,以支持大整数和任意精度的浮点数计算。这个库通常包含以下关键特性: 1. **构造函数**:创建一个`BigDecimal`...

    BigDecimal类

    BigDecimal 类是 Java 中的一种数值类型,主要用于处理超过 16 位有效数字的数值运算。该类提供了多种构造器和方法,用于创建和操作 BigDecimal 对象。 构造器 BigDecimal 类提供了四种构造器,用于创建不同的 ...

    关于java中BigDecimal的简介(csdn)————程序.pdf

    Java中的`BigDecimal`类是用于表示和操作高精度浮点数的重要工具,尤其适用于需要进行精确计算的场景,如财务和货币计算。由于基本数据类型`double`和`float`在进行大数值或高精度计算时可能会导致精度丢失,因此`...

    ArithmeticUtils-高精度数学运算.pdf

    在当前的软件开发中,数学运算的...总之,ArithmeticUtils类通过封装BigDecimal类的运算细节,提供了一系列精确控制运算精度的方法,使Java在进行高精度计算时变得更为简单和直接,大大降低了开发的难度和出错的可能。

    java.math.BigDecimal 操作类

    java.math.BigDecimal 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等

    MyEditTextApplication输入框BigDecimal计算价格

    6. **性能优化**:由于BigDecimal运算相对于基本类型来说较慢,因此在处理大量数据或者频繁计算时,要注意优化代码,避免不必要的计算和内存开销。 7. **UI更新**:在更新EditText中的显示时,应该在UI线程进行,...

    BigDecimal工具类.docx

    BigDecimal工具类提供了多种精确的数学运算方法,满足了我们在实际开发中对高精确计算的需求。同时,该工具类还提供了很多实用的方法,使得我们可以更方便地进行数学运算。 知识点: 1. BigDecimal工具类是Java中...

    BigDecimal的计算

    `BigDecimal` 是 Java 中的一个类,它能够提供对任意精度的十进制数的支持。通过使用 `BigDecimal`,可以避免由于二进制浮点数的有限精度带来的舍入误差问题。 ##### 2. 构造方法与静态工厂方法 `BigDecimal` 提供...

Global site tag (gtag.js) - Google Analytics