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();
}
}
分享到:
相关推荐
综上所述,BigDecimal到Double的转换是一项常用的操作,特别是在处理需要高精度计算的应用程序中。虽然使用doubleValue()方法可以直接完成转换,但是在某些场景下需要注意可能出现的精度损失问题。为了避免这些问题...
总之,BigDecimal 是 Java 中用于高精度计算的关键工具,通过其提供的方法和舍入模式,可以确保在财务等对精度有严格要求的场景下进行准确的计算。在实际编程中,应优先使用字符串构造 BigDecimal 对象,并合理设置...
这种精度丢失的现象对于需要高精度计算的应用来说是一个常见的问题。本文将详细介绍Java中的 `double` 类型精度问题,并提供几种解决方法。 #### 一、Java Double 精度丢失的原因 1. **二进制表示限制**:`double`...
在 Java 中,浮点数的表示形式有多种,包括 float 和 double 等,但是这些类型在进行计算时会出现精度问题,而 BigDecimal 则可以解决这种问题。本文将主要介绍 Java 中的 BigDecimal 和 double 的示例及相关问题...
以下是使用 BigDecimal 类来对 double 类型的数据进行精度处理的示例代码: ```java public static double round(double value, int scale, int roundingMode) { BigDecimal bd = new BigDecimal(value); bd = bd...
在Java编程语言中,当我们处理涉及货币、财务或者任何需要高精度计算的场景时,`BigDecimal` 类是非常重要的工具之一。本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用它来进行精确的算术运算。 #### ...
Java 使用 BigDecimal 进行高精度计算的示例代码 在 Java 中,浮点类型的数值计算存在舍入误差的问题,因为浮点数不是精确值。因此,在进行高精度计算时,需要使用 BigDecimal 类来避免舍入误差。 首先,为什么...
通过以上分析,我们可以看到 `BigDecimal` 在处理金融或科学计算中的重要性,尤其是在需要高精度计算的场景下。合理使用 `BigDecimal` 及其提供的各种方法,可以帮助我们避免因浮点数精度限制而产生的误差问题。此外...
要保证精度就要使用BigDecimal类,而且不能直接从double直接转BigDecimal,要将double转string再转BigDecimal。也就是不能使用BigDecimal(double val) 方法,你会发现没有效果。要使用BigDecimal(String val) 方法...
为了解决这个问题,Java提供了一个名为`BigDecimal`的类,它允许我们进行高精度的十进制数值计算。`BigDecimal`使用字符串表示法来存储和操作数值,从而避免了二进制浮点数的精度限制。以下是一些使用`BigDecimal`...
BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些场景中,浮点数的精度丢失可能导致错误的结果。 在计算机科学中,浮点数(如`float`和`double...
在Java编程中,进行高精度的数学计算时,通常会使用`java.math.BigDecimal`类,因为Java中的简单数据类型如`float`和`double`在处理大数或精确计算...在处理大数或高精度计算时,`BigDecimal`是Java程序员的得力助手。
在Java编程语言中,`BigDecimal`类用于处理大整数和高精度小数的运算,以确保计算结果的精确性。在Python中虽然没有直接对应的类,但理解`BigDecimal`的工作原理对于处理需要精确计算的场景是很有帮助的。本篇文章将...
其中,BigDecimal(double val)将一个double类型的变量转换为BigDecimal,而BigDecimal(String val)将一个字符串转换为BigDecimal。 基本运算 使用BigDecimal,我们可以进行加、减、乘、除四种基本运算。下面我们将...
在BigDecimal工具类中,我们可以看到多个重载的方法,例如add方法和sub方法,这些方法可以根据不同的参数类型和精度需求进行选择。 首先,让我们来看一下add方法。add方法有三种重载形式,分别是add(double,double)...
在Java编程语言中,`BigDecimal`...了解`BigDecimal`的工作原理及其方法,对于编写精确、可靠的金融和其他需要高精度计算的Java应用程序至关重要。通过合理的使用和定制,我们可以确保在处理大数时获得预期的准确结果。
BigDecimal b1 = new BigDecimal(Double.toString(d1)); BigDecimal b2 = new BigDecimal(Double.toString(d2)); return b1.subtract(b2).doubleValue(); } public static double mul(double d1, double d2) {...
在Java编程语言中,BigDecimal是...总之,BigDecimal是Java中处理高精度计算的关键工具,尤其在金融、会计等对精度要求严格的领域。正确理解和使用BigDecimal的方法和策略,能确保程序在进行复杂计算时得出准确的结果。
Android 精确计算工具类。 /** * @Title: Arith.java * @Package com.uxun.pay.util * @Description: TODO(用一句话描述该文件做什么) * @author daiw * @date 2016-1-5 上午9:05:34 * @version V1.0 */ ...
float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的...