BigDecimal不整除的一个异常
金额的数据类型是BigDecimal
通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常的,异常如下:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)
应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333....
解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)
在 java中, 四舍五入通过 BigDecimal 来实现。一定要注意:BigDecimal is Immutable。也就是跟String一样,对前一个的修改,比如setScale(), add()等都会返回一个新的BigDecimal.四舍五入舍入模式是 BigDecimal.ROUND_HALF_UP
BigDecimal定义了一下舍入模式,只有在作除法运算或四舍五入时才用到舍入模式,下面简单介绍,详细请查阅J2se API文档
static int
ROUND_CEILING
Rounding mode to round towards positive infinity.
向正无穷方向舍入
static int
ROUND_DOWN
Rounding mode to round towards zero.
向零方向舍入
static int
ROUND_FLOOR
Rounding mode to round towards negative infinity.
向负无穷方向舍入
static int
ROUND_HALF_DOWN
Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
static int
ROUND_HALF_EVEN
Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用ROUND_HALF_DOWN
static int
ROUND_HALF_UP
Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
static int
ROUND_UNNECESSARY
Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.
计算结果是精确的,不需要舍入模式
static int
ROUND_UP
Rounding mode to round away from zero.
向远离0的方向舍入
分享到:
相关推荐
* `BigDecimal(int)`: 创建一个具有参数所指定整数值的对象。 * `BigDecimal(double)`: 创建一个具有参数所指定双精度值的对象。 * `BigDecimal(long)`: 创建一个具有参数所指定长整数值的对象。 * `BigDecimal...
在Java编程语言中,当我们处理涉及货币、财务或者任何需要高精度计算的场景时,`BigDecimal` 类是非常重要的工具之一。本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用它来进行精确的算术运算。 #### ...
这个库提供了一个名为`BigDecimal`的数据类型,用于实现大数运算,确保结果的精度不受损失。 "BigDecimal.js.zip"是一个压缩包,其中包含了"BigDecimal-all-last.min.js"文件。这个文件是BigDecimal.js库的最小化...
1. **构造函数**:创建一个`BigDecimal`对象,可以接受字符串、数字或其他`BigDecimal`实例作为参数,以初始化值。 2. **算术操作**:提供加法(`add`)、减法(`subtract`)、乘法(`multiply`)、除法(`divide`...
总的来说,理解和熟练运用BigDecimal是每个Java开发者必备的技能之一,特别是在处理货币计算、财务计算等场景时,能够避免因为浮点数精度问题导致的错误。在使用BigDecimal时,一定要注意其性能开销,因为它比基本的...
BigDecimal 使用 BigDecimal 是 Java 中一个用于处理金融和商业应用的类,其主要功能是提供高精度的数字计算。...BigDecimal 是一个非常有用的工具类,能够提供高精度的数字计算,广泛应用于金融、商业等领域。
- `BigDecimal.valueOf(double val)`:根据双精度浮点数创建一个 `BigDecimal` 实例。 ##### 3. 数学运算 `BigDecimal` 提供了一系列的方法来进行数学运算: - `add(BigDecimal augend)`:加法操作。 - `subtract...
第一个方法add(double,double)是将两个double类型的数相加,然后返回double类型的结果。第二个方法add(String,String)是将两个字符串类型的数相加,然后返回BigDecimal类型的结果。第三个方法add(String,String,int)...
BigDecimal是Java提供的一个大数类,它可以用来进行精确的浮点数运算,避免了传统浮点数运算中可能出现的精度损失问题。在金融或会计系统中,对数据的精度要求很高,BigDecimal就成为首选的数据类型。 在...
这将返回一个新的 BigDecimal 实例,表示 num1 和 num2 的和。 3. 减法运算(subtract()): ```java BigDecimal result2 = num1.subtract(num2); ``` 返回 num1 减去 num2 的差。 4. 乘法运算(multiply())...
在 Java 编程中,`BigDecimal` 和 `Integer` 是两个不同类型的数值表示。`BigDecimal` 用于处理精确的浮点数运算,适合财务或金融计算,因为它可以避免浮点数计算中的精度问题。而 `Integer` 是 Java 中的整数类型,...
BigDecimal是java.math包下的一个类,它提供了对不可变的、任意精度的十进制数的支持。这个类的构造方法允许用户指定一个非常大的整数(包含小数位)作为基数以及一个表示小数点位置的整数。它可以处理非常大的数字...
我们的 new BigDecimal(0.15)得到了一个超接近的数“0.1499999999999999944488848768742172978818416595458984375”,但它就是小于0.15。上网查得,BigDecimal有三种构造方式: java 代码 BigDecimal(Stirng s), ...
然而,在使用`BigDecimal`进行除法操作时,如果不进行特殊处理,可能会遇到`ArithmeticException`异常,这个异常通常会在除法运算产生非终止的小数扩张,即无法精确表示的十进制结果时抛出。 异常信息 "Non-...
在Java编程语言中,`BigInteger`和`BigDecimal`是两个重要的类,它们分别用于处理大整数和高精度浮点数。这两个类位于`java.math`包下,为开发者提供了超越基本数据类型(如int、long和double)的计算能力。在深入...
标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些...
其实有个不错的资源可以利用。 引用附件的JS,就可以轻松搞定JS的计算问题了。 使用例 <!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10")....
"js_bigdecimal_1_0_1.zip"是一个包含了JavaScript环境下实现BigDecimal功能的库,版本号为1.0.1,据描述,这个库经过了实际测试,证明是有效的。 BigDecimal是一种可以表示任意精度的十进制浮点数的类,主要用于...
BigDecimal还提供了其他一些方法,如`compareTo()`用于比较两个BigDecimal对象的大小,`scale()`获取小数点后的位数,`stripTrailingZeros()`去除尾部的零,`toPlainString()`返回不包含科学记数法的字符串表示等。...
BigDecimal 类提供了一个名为 `intValue()` 的方法,该方法用于将 BigDecimal 对象转换为 `int` 类型。此方法会返回 BigDecimal 的整数值,前提是该值在 Integer 的取值范围内,即 `-2^31` 到 `2^31 - 1`。例如: ...