java 中的数字舍入算法简介

在使用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舍入方式,就是四舍五入,也是不在保留小数位数。

你可能感兴趣的:(java 中的数字舍入算法简介)