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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 19,615评论 1 19
  • 应用场景 大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。比如:货币 使用 ...
    九都散人阅读 13,869评论 0 9
  • 感恩这一本本好书来到我身边,每一本都价值连城。 一本好书能让你打开眼界或者增长智慧。《巴比伦最富有的人》就是这样一...
    小easy阅读 2,920评论 3 0
  • 既得利益者很难再抛弃现有的所得,去践行自己曾经的原则。他们看起来或相比较来说是有所凭借了。但是,对于践行自己内心的...
    DDZD阅读 3,816评论 0 1

友情链接更多精彩内容