bigdecimal 舍入规则
BigDecimal是Java中的一个类,用于处理高精度的数字计算。在进行数字计算时,往往会涉及到舍入规则的问题。BigDecimal提供了多种不同的舍入规则,本文将详细介绍这些规则。
一、舍入模式
在BigDecimal中,舍入模式是通过RoundingMode枚举类来表示的。RoundingMode枚举类定义了8种不同的舍入模式:
1. UP:向上舍入(始终进位)
2. DOWN:向下舍入(始终舍弃)
3. CEILING:向正无穷大方向舍入
4. FLOOR:向负无穷大方向舍入
5. HALF_UP:四舍五入
6. HALF_DOWN:五舍六入
7. HALF_EVEN:银行家舍入法(四舍六进五成双)
8. UNNECESSARY:不需要进行任何舍入操作
二、设置精度和保留位数
在使用BigDecimal进行数字计算时,我们需要先设置其精度和保留位数。精度指的是小数点后的位数,而保留位数指的是要保留几位小数。
1. setScale方法
setScale方法用于设置BigDecimal对象的精度和保留位数。该方法有两个参数:
setScale(int newScale, RoundingMode roundingMode)
newScale表示要设置的精度和保留位数,roundingMode表示要使用的舍入模式。
例如,如果要将一个BigDecimal对象保留两位小数,并使用四舍五入的方式进行舍入,可
以使用以下代码:
BigDecimal bd = new BigDecimal("3.1415926");
bd = bd.setScale(2, RoundingMode.HALF_UP);
2. setScale方法的注意事项
在使用setScale方法时,需要注意以下几点:
(1)如果设置的精度和保留位数比原来的小,则会进行截断操作。例如,将3.1415926保留两位小数后得到3.14。
(2)如果设置的精度和保留位数比原来的大,则会在末尾补0。例如,将3.14保留三位小数后得到3.140。
(3)如果要对一个BigDecimal对象进行多次setScale操作,则需要注意每次操作之间的精度和保留位数是否相同。如果不同,则可能会出现不可预期的结果。
三、舍入规则示例
下面通过一些示例来说明各种舍入规则的具体效果。
bigdecimal除法保留小数1. UP:向上舍入
向上舍入表示始终进位。例如,将3.1415926保留两位小数并向上舍入后得到3.15。
2. DOWN:向下舍入
向下舍入表示始终舍弃。例如,将3.1415926保留两位小数并向下舍入后得到3.14。
3. CEILING:向正无穷大方向舍入
向正无穷大方向舍入表示将小数部分向上进位。例如,将3.1415926保留两位小数并向正无穷大方向舍入后得到3.15。
4. FLOOR:向负无穷大方向舍入
向负无穷大方向舍入表示将小数部分向下舍弃。例如,将-3.1415926保留两位小数并向负无穷大方向舍入后得到-3.15。
5. HALF_UP:四舍五入
四舍五入表示将小数部分四舍五入。例如,将3.1415926保留两位小数并四舍五入后得到3.14。
6. HALF_DOWN:五舍六入
五舍六入表示将小数部分五舍六入。例如,将3.145保留两位小数并五舍六入后得到3.14。
7. HALF_EVEN:银行家舍入法
银行家舍入法也称为“四舍六进五成双”,其规则如下:
(1)如果要截取的数字的第一位是5,则要看该数字前面的一位数字是否为偶数,如果是偶数,则直接截取;如果是奇数,则进位。
(2)如果要截取的数字的第一位不是5,则按照四舍五入的规则进行舍入。
例如,将3.145保留两位小数并使用银行家舍入法后得到3.14。
8. UNNECESSARY:不需要进行任何舍入操作
如果使用UNNECESSARY模式进行舍入,而要截取的数字的小数部分不为0,则会抛出ArithmeticException异常。例如,将3.145保留两位小数并使用UNNECESSARY模式进行舍入时,会抛出异常。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。