`
cynan168
  • 浏览: 39281 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BigDecimal 解释

    博客分类:
  • java
UP 
阅读更多

ROUND_CEILING    
  如果   BigDecimal   是正的,则做   ROUND_UP   操作;如果为负,则做   ROUND_DOWN   操作。    
  ROUND_DOWN    
  从不在舍弃(即截断)的小数之前增加数字。    
  ROUND_FLOOR    
  如果   BigDecimal   为正,则作   ROUND_UP   ;如果为负,则作   ROUND_DOWN   。    
  ROUND_HALF_DOWN    
  若舍弃部分>   .5,则作   ROUND_UP;否则,作   ROUND_DOWN   。    
  ROUND_HALF_EVEN    
  如果舍弃部分左边的数字为奇数,则作   ROUND_HALF_UP   ;如果它为偶数,则作   ROUND_HALF_DOWN   。    
  ROUND_HALF_UP    
  若舍弃部分>=.5,则作   ROUND_UP   ;否则,作   ROUND_DOWN   。    
  ROUND_UNNECESSARY    
  该“伪舍入模式”实际是指明所要求的操作必须是精确的,,因此不需要舍入操作。    
  ROUND_UP    
  总是在非   0   舍弃小数(即截断)之前增加数字。

 

 

 


/**
 * 一般科学、数学、金钱等 方面对数据要求严格时,需要用DECIMAL这个类。
 * @author Administrator
 *
 */
public class Arith{
    // 默认除法运算精度
    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();
    }
}

 

 

分享到:
评论

相关推荐

    BigDecimal的计算

    本文将基于提供的代码片段来详细解释如何使用 `BigDecimal` 进行计算,并深入探讨其应用场景。 #### 关键知识点 ##### 1. BigDecimal 类的概述 `BigDecimal` 是 Java 中的一个类,它能够提供对任意精度的十进制数...

    BigDecimal-CPP-master.zip

    标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些...

    Java中BigDecimal精度和相等比较的坑

    这解释了为什么在示例代码中,即使数值看起来都是0,但因为精度不同,`equals()` 返回的结果也不尽相同。 为了避免这些精度和相等比较的问题,我们通常建议: 1. 避免使用浮点数直接创建 `BigDecimal`,而是使用...

    java代码-BigDecimal 四舍五入保留2位小数. 金额从单位分转成单位元

    下面将详细解释相关知识点。 1. BigDecimal类: BigDecimal是Java提供的一个大数类,它提供了对任意精度的十进制数进行算术运算的能力,避免了浮点数计算时可能出现的精度问题。例如,`new BigDecimal("10.5")`...

    阿里java开发规范

    - 类、接口和方法应有清晰的Javadoc注释,解释其功能、用途和使用注意事项。 - 单行注释尽量避免在代码行的前面,而应使用`//`放在代码行的后面。 - 注释要保持更新,与代码同步,避免出现“死注释”。 3. **...

    大数相加 java

    注释应包括函数的目的、输入、输出以及关键步骤的解释。 8. **测试**:为了确保算法的正确性,需要编写测试用例,覆盖各种边界条件,如零、正数、负数、非常大的数、空字符串等。 综上所述,实现大数相加功能需要...

    创建一个类(DoubleConverter),该类的作用是将一个字符串的值转换成浮点型(double)数值。

    根据给定的信息,本文将详细解释如何在Java中创建一个名为`DoubleConverter`的类,其功能是将字符串转换为浮点数(double)。本文将深入解析类的设计思路、实现细节以及潜在的问题处理方法。 ### 创建`...

    decimalToString

    如果需要深入学习“decimalToString”的具体知识,建议直接访问提供的博客链接,查看博主分享的具体代码示例和上下文解释。在那里,你可能会找到关于如何在实际项目中有效地进行十进制到字符串转换的详细信息。

    Java API帮助文档中文版1.8版和官方中文1.6版

    此外,每个方法和字段都有详细的注释,解释了其功能、参数、返回值和可能抛出的异常。 在实际开发中,开发者可以通过查阅API文档来了解如何使用特定的类或方法,解决遇到的问题。例如,当你需要进行文件操作时,你...

    《Java解惑》

    创建`BigDecimal`对象时,应使用`BigDecimal(String)`构造器,避免`BigDecimal(double)`导致的精度损失。 3. **整数相乘溢出**: 当多个整数相乘可能导致溢出时,必须确保至少有一个因子是`long`类型,如`24L * 60...

    javaSE基础常用类使用归纳总结

    本篇文章将针对给定文件中的内容,详细解释Java SE基础中常用类的使用方法,包括`Integer`类、`BigInteger`类以及`BigDecimal`类。 #### Integer类 `Integer`类是Java中int数据类型的包装类。它提供了许多有用的...

    JAVA 解惑(解析JAVA开发中的95个疑惑点)

    BigDecimal payment = new BigDecimal("2.00"); BigDecimal cost = new BigDecimal("1.10"); BigDecimal change = payment.subtract(cost); System.out.println(change); ``` ### 结论 本文通过两个具体的...

    JAVA解惑.pdf

    每个谜题后都有详细的解释,指导读者如何识别和避免这些问题。因此,无论是刚入门Java的新手还是经验丰富的开发者,这本书都能提供有价值的参考。 总结以上知识点,我们可以得出几个重要的结论: 1. 在使用取余...

    float和double

    本文将详细解释float和double的范围和精度,及其在商业计算中的应用问题和解决方法。 1. 范围 float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位。因此,float的指数范围为...

    Java解惑(中文)

    BigDecimal oneTenCents = new BigDecimal("1.10"); System.out.println(twoDollars.subtract(oneTenCents)); ``` **实践建议:** - 对于货币计算,优先选择`BigDecimal`而非`float`或`double`。 - 在需要控制...

    Java源码根据消费金额计算折扣.rar

    压缩包中的"说明.txt"文件可能详细解释了这些逻辑,包括每个折扣阶段的开始和结束条件,以及如何在实际项目中集成和使用这个`DiscountCalculator`类。它可能还包含了如何测试和调试这段代码的提示,确保计算结果准确...

    sonar检查规则指南

    - **解释**:`BigDecimal`类提供了一种可以处理任意精度的十进制数的方式。然而,通过`BigDecimal(double)`构造器创建`BigDecimal`对象可能会导致精度损失,因为`double`类型本身就存在精度问题。 - **最佳实践**:...

    java计算器内部代码

    下面我们将详细解释这个Java计算器的核心组成部分: 1. **栈数据结构的使用**: - 代码使用了两个栈:`numbers` 和 `chs`。 - `numbers` 栈用于存储中间计算结果,即数字(`BigDecimal` 类型)。 - `chs` 栈用于...

    sishewuru.rar_四舍五入

    标题 "sishewuru.rar_四舍五入" 暗示了我们关注的主题是关于数值计算中的四舍五入操作。在这个主题下,我们将深入探讨四舍...文件列表中的"四舍五入.docx"可能包含了更详细的解释和示例,建议打开阅读以获取更多信息。

Global site tag (gtag.js) - Google Analytics