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` 进行计算,并深入探讨其应用场景。 #### 关键知识点 ##### 1. BigDecimal 类的概述 `BigDecimal` 是 Java 中的一个类,它能够提供对任意精度的十进制数...
标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些...
这解释了为什么在示例代码中,即使数值看起来都是0,但因为精度不同,`equals()` 返回的结果也不尽相同。 为了避免这些精度和相等比较的问题,我们通常建议: 1. 避免使用浮点数直接创建 `BigDecimal`,而是使用...
下面将详细解释相关知识点。 1. BigDecimal类: BigDecimal是Java提供的一个大数类,它提供了对任意精度的十进制数进行算术运算的能力,避免了浮点数计算时可能出现的精度问题。例如,`new BigDecimal("10.5")`...
- 类、接口和方法应有清晰的Javadoc注释,解释其功能、用途和使用注意事项。 - 单行注释尽量避免在代码行的前面,而应使用`//`放在代码行的后面。 - 注释要保持更新,与代码同步,避免出现“死注释”。 3. **...
注释应包括函数的目的、输入、输出以及关键步骤的解释。 8. **测试**:为了确保算法的正确性,需要编写测试用例,覆盖各种边界条件,如零、正数、负数、非常大的数、空字符串等。 综上所述,实现大数相加功能需要...
根据给定的信息,本文将详细解释如何在Java中创建一个名为`DoubleConverter`的类,其功能是将字符串转换为浮点数(double)。本文将深入解析类的设计思路、实现细节以及潜在的问题处理方法。 ### 创建`...
如果需要深入学习“decimalToString”的具体知识,建议直接访问提供的博客链接,查看博主分享的具体代码示例和上下文解释。在那里,你可能会找到关于如何在实际项目中有效地进行十进制到字符串转换的详细信息。
此外,每个方法和字段都有详细的注释,解释了其功能、参数、返回值和可能抛出的异常。 在实际开发中,开发者可以通过查阅API文档来了解如何使用特定的类或方法,解决遇到的问题。例如,当你需要进行文件操作时,你...
创建`BigDecimal`对象时,应使用`BigDecimal(String)`构造器,避免`BigDecimal(double)`导致的精度损失。 3. **整数相乘溢出**: 当多个整数相乘可能导致溢出时,必须确保至少有一个因子是`long`类型,如`24L * 60...
本篇文章将针对给定文件中的内容,详细解释Java SE基础中常用类的使用方法,包括`Integer`类、`BigInteger`类以及`BigDecimal`类。 #### Integer类 `Integer`类是Java中int数据类型的包装类。它提供了许多有用的...
BigDecimal payment = new BigDecimal("2.00"); BigDecimal cost = new BigDecimal("1.10"); BigDecimal change = payment.subtract(cost); System.out.println(change); ``` ### 结论 本文通过两个具体的...
每个谜题后都有详细的解释,指导读者如何识别和避免这些问题。因此,无论是刚入门Java的新手还是经验丰富的开发者,这本书都能提供有价值的参考。 总结以上知识点,我们可以得出几个重要的结论: 1. 在使用取余...
本文将详细解释float和double的范围和精度,及其在商业计算中的应用问题和解决方法。 1. 范围 float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位。因此,float的指数范围为...
BigDecimal oneTenCents = new BigDecimal("1.10"); System.out.println(twoDollars.subtract(oneTenCents)); ``` **实践建议:** - 对于货币计算,优先选择`BigDecimal`而非`float`或`double`。 - 在需要控制...
压缩包中的"说明.txt"文件可能详细解释了这些逻辑,包括每个折扣阶段的开始和结束条件,以及如何在实际项目中集成和使用这个`DiscountCalculator`类。它可能还包含了如何测试和调试这段代码的提示,确保计算结果准确...
- **解释**:`BigDecimal`类提供了一种可以处理任意精度的十进制数的方式。然而,通过`BigDecimal(double)`构造器创建`BigDecimal`对象可能会导致精度损失,因为`double`类型本身就存在精度问题。 - **最佳实践**:...
下面我们将详细解释这个Java计算器的核心组成部分: 1. **栈数据结构的使用**: - 代码使用了两个栈:`numbers` 和 `chs`。 - `numbers` 栈用于存储中间计算结果,即数字(`BigDecimal` 类型)。 - `chs` 栈用于...
标题 "sishewuru.rar_四舍五入" 暗示了我们关注的主题是关于数值计算中的四舍五入操作。在这个主题下,我们将深入探讨四舍...文件列表中的"四舍五入.docx"可能包含了更详细的解释和示例,建议打开阅读以获取更多信息。