`
Kevin12
  • 浏览: 231038 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

BigDecimal实现double精度计算

阅读更多
java中的float 和double类型会发生精度丢失,为了能精确表示和计算浮点数,java提供BigDecimal类。创建BigDecimal对象时,不要直接使用double浮点数来创建一个BigDecimal对象,否则同样会发生精度丢失问题,要用String类型作为创建BigDecimal对象的参数,如BigDecimal d = new BigDecimal("0.05");
程序中用对double浮点数进行加减乘除运算时,则需要先将double类型数值包装成BigDecimal对象,下面是一个封装double精确计算的类。
package com.kevin.char9;

import java.math.BigDecimal;

public class BigDecimalUtil {
	//默认除法运算精度,保留小数点后10位
	private static final int DEF_DIV_SCALE=10;
	//构造器私有,让这个类不能实例化
	private BigDecimalUtil(){}
	/**
	 * 
	 * @Description:  提供精确的加法运算
	 * @param v1 被加数
	 * @param v2 加数
	 * @return 两个参数的和
	 * @Auther: lujinyong
	 * @Date: 2014-1-7 下午01:07:16
	 */
	public static double add(double v1,double v2){
		BigDecimal b1 = BigDecimal.valueOf(v1);
		BigDecimal b2 = BigDecimal.valueOf(v2);
		return b1.add(b2).doubleValue();
	}
	/**
	 * 
	 * @Description: 提供精确的减法运算
	 * @param v1 被减数
	 * @param v2 减数
	 * @Auther: lujinyong
	 * @Date: 2014-1-7 下午01:05:43
	 */
	public static double sub(double v1,double v2){
		BigDecimal b1 = BigDecimal.valueOf(v1);
		BigDecimal b2 = BigDecimal.valueOf(v2);
		return b1.subtract(b2).doubleValue();
	}
	/**
	 * 
	 * @Description: 提供精确的乘法运算
	 * @param v1被乘数
	 * @param v2乘数
	 * @return 两个参数的积
	 * @Auther: lujinyong
	 * @Date: 2014-1-7 下午01:07:54
	 */
	public static double multiply(double v1,double v2){
		BigDecimal b1 = BigDecimal.valueOf(v1);
		BigDecimal b2 = BigDecimal.valueOf(v2);
		return b1.multiply(b2).doubleValue();
	}
	/**
	 * 
	 * @Description:提供(相对)精确的除法运算,当发生除不尽的情况,精确到小数点后10位数字四舍五入
	 * @param v1被除数
	 * @param v2除数
	 * @return 两个参数的商 
	 * @Auther: lujinyong
	 * @Date: 2014-1-7 下午01:09:38
	 */
	public static double div(double v1,double v2){
		BigDecimal b1 = BigDecimal.valueOf(v1);
		BigDecimal b2 = BigDecimal.valueOf(v2);
		return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
}
分享到:
评论

相关推荐

    Java中double类型下出现精度计算错误情况下出力方法

     要保证精度就要使用BigDecimal类,而且不能直接从double直接转BigDecimal,要将double转string再转BigDecimal。也就是不能使用BigDecimal(double val) 方法,你会发现没有效果。要使用BigDecimal(String val) 方法...

    精确计算工具类

    Android 精确计算工具类。 /** * @Title: Arith.java * @Package com.uxun.pay.util * @Description: TODO(用一句话描述该文件做什么) * @author daiw * @date 2016-1-5 上午9:05:34 * @version V1.0 */ ...

    BigDecimal 加减乘除运算

    float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的...

    BigDecimal-CPP-master.zip

    关于浮点数在计算机中的存储方式与精度丢失问题(float,double):https://blog.csdn.net/alzzw/article/details/108132830 可以用此类解决

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

    对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作,下面这篇文章给大家介绍了Java中BigDecimal的加减...

    关于java的数值精度

    java程序中数值的精度问题,float、double容易产生精度数值问题,不适合精度计算,而bigdecimal正好解决这一问题

    仿WINDOWS简版计算器

    Java SE学习完成后,自己练手项目二,计算器 ... * @return BigDecimal 包装为高精度计算 */ private static BigDecimal getBigDecimal(double number) { return new BigDecimal(number); }

    java中BigDecimal进行加减乘除的基本用法

    大家应该对于不需要任何准确计算精度的数字可以直接使用float或double运算,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。下面这篇文章就给大家介绍介绍关于...

    使用JavaFX实现的中缀转后缀 计算器(可以负数小数点括号)期末作业满分答案,大量注释(行行注释保证看懂)

    利用BigDecimal 大数据类 来保证精度 例如Double 2-1.1=0.89999,在大数据类就无异常 例如 9+(-9)=0 9--6=15 9*(-9--3)= -54 3 + (-2) -1 = 0 -9*(9--2)*-3 = 297 实现了键位绑定 本计算器回退功能是直接...

    处理较大数字的PHP库.zip

    在PHP里提供了大数字的操作类,有的类是用于高精度计算,其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。下边我们介绍BigDecimal类:BigDecimal 的实现利用到了BigInteger,不同的是...

    Java的数字精确计算问题-BigDecimal

    java的数字运算,偶尔会出现精度的问题,以下阐述的 java的...  java为了让float或者double类型能够精确的计算,提供了BigDecimal类。  示例如下: public static BigDecimal getBigDecimal(Doubleval){ //把d

    BigDecimalUtils

    float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的...

    Java-关于基本数据类型中浮点数计算产生的精度问题

    在基本数据类型中,float和double都表示浮点型数据,而计算机计算采取的是对二进制的计算,所以会存在一定程度上的精度丢失问题。 BigDecimal类是一个大小数操作类,可以用来对超过16位有效位的数据进行精确的运算,...

    JavaDemical:Java 数字API

    否则,通过向该操作提供适当的MathContext对象,可以对已选择的精度和舍入模式执行计算。 在商业计算中要用BigDecimal。BigDecimal所创建的是对象, 我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学...

    xmljava系统源码-fin-expr:Java的表达式计算器。专注精准,可用于金融系统

    在计算时为了避免double类型的数据误差,默认均采用BigDecimal进行计算。 Maven Repo: 要使用FinExpr,如果你使用Maven或者Gradle构建你的项目,只要按下面的方式在你的项目里引入依赖即可。 如果要查看项目,下载...

    mandelbrot:简单的Mandelbrot查看器

    可以交互式缩放到10 -100甚至更大,如果需要更高的精度,所有计算将自动从double切换到BigDecimal。 渲染是渐进式的且经过优化的,因此尽管缩放级别为100的图像的完整渲染可能会超过1个小时,但应用程序仍会保持...

    WeDoo-TDD-kata

    为了精确计算数量,with应该使用BigDecimal,但是为了使代码更快/更简单,我使用了double(对于2个十进制精度,这应该足够了)* 可以将ID包装到对象中(例如,使用UserId以确保格式和可读性) 所有抽象都可以轻松...

Global site tag (gtag.js) - Google Analytics