在使用java的过程中,如果遇到金钱的计算过程中,为了准确的计算,经常会使用BigDecimal,在java的math包中,有个舍入模式的枚举,RoundingMode。下面介绍下这个枚举类的几个常量,对于这些舍入算法,总是记不清楚,前段时间仔细看了下,这里做下笔记。
1.RoundingMode.UP
远离0方向舍入,直接举例子,这里保留两位小数,
2.125 由于是远离0 方向舍入,所以要进位,就是 2.13
-2.125. 由于是远离0方向舍入,这里可以想象成一个数轴,远离0方向,这里就是 -2.13。
2.RoundingMode.DOWN,
向零方向舍入,举例子
2.125 由于是向0方向进行舍入,这里还以数轴来理解,就是 2.12
-2.125。 由于是向0方向摄入,以数轴来理解,就是-2.13
3.RoundingMode.CEILING
向正无穷方向进行舍入,这种舍入方式不会减少当前舍入的值,举例子。
2.125 由于是向正无穷方向舍入,这里以数轴来理解,要进位,这里是 2.13
-2.125 由于是向正无穷方向舍入,这里以数轴来理解,就是舍去,为2.12
4.RoundingMode.FLOOR
向负无穷方向进行舍入,这种方式不会增加当前舍入的值。举例子
2.125 由于是向负无穷方向舍入,还是一数轴来理解 2.12
-2.125 由于是向负无穷方向舍入,同样以数轴理解,2.13
RoundingMode.HALF_UP
向着最近的数进行舍入,就是我们小学经常学习的四舍五入算法,当要舍入的值 大于 等于5 就 就和UP 的舍入方式,
否则和DOWN的舍入模式一样,这里以保留两位小数
2.125 舍入的部分大于 等于0.05。所以和UP舍入方式,远离0方向舍入,就是2.13
2.124 舍入的部分 小于0.005,所以和DOWAN舍入方式,向0方向舍入,就是2.12
-2.125 舍入的部分为0.005。 这里不算符号,和UP模式,远离0方向舍入,即-2.13
RoundingMode.HALF_DOWN
此舍入方式和 HALF_DOWN 类似,唯一不同的就是 在 舍入部分 等于0.005,这个时候要舍去,这里还以保留两位小数,来说明,
2.125 舍入的部分 等于0.005 这里要舍去,为2.12
2.126 舍入部分大于 0.005 这里要进位,为2.13
-2.125 舍入等于0.005 这里舍去,为2.12
-2.126 舍入模式大于0.005,舍入模式为UP,所以为-2.13
RoundingMode.HALF_EVEN
,向着最接近的数字舍入,此舍入方式为美国的银行家发明,银行是靠储贷利率差赚钱的,如果实行四舍五入,那么银行就会赔钱,所以,在舍入为0.005的时候,不是直接舍去活着入上,而是看舍入前面的数字是奇数还是偶数,如果是奇数,则同HAFL_UP 舍入方式相同,如果是偶数,则和HALF_DOWN舍入方式相同,举例子,这里还是保留两位小数
2.125 舍入的前面 为2 是偶数,和HALF_DOWN舍入模式相同,为2.12
2.135 舍入的前面数字为 3 奇数,和HALF_UP舍入模式一样,2.13
2.136 最近的数字为。 2.14,这里舍入不是等于0.005,不在看奇偶
2.146 最近的数字 2.15。 这里舍入不是等于0.005,不在看奇偶
-2.125 舍入的前面为2 是偶数,和HALF_DOWN 一样,-2.13
-2.135 舍入的前面数字为3,奇数,和HALF_UP,-2.14
-2.136 最接近的数字为。 -2.14
-2.132 最接近的数字为 -2.13
这里在说下 Math 类的 ceil()和 floor方法,这里ceil和floor 是用的CEILING和FLOOR 舍入方式,不过不在保留小数,就是我们经常说的 向上取整,向下取整。Math.round方法用的是HALF_UPf舍入方式,就是四舍五入,也是不在保留小数位数。