美文网首页
java 中的数字舍入算法简介

java 中的数字舍入算法简介

作者: 半路入行的码农 | 来源:发表于2017-03-13 17:10 被阅读0次

在使用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 中的数字舍入算法简介

    在使用java的过程中,如果遇到金钱的计算过程中,为了准确的计算,经常会使用BigDecimal,在java的ma...

  • java的四舍五入与保留位

    简介 主要涉及类BigDecimal,舍入模式RoundingMode,及其他类 java支持7中舍入法 1、 R...

  • Java BigDecimal 高精度运算

    不同舍入模式下的舍入操作汇总 数字UPDOWNCEILINGFLOORHALF_UPHALF_DOWNHALF_E...

  • 算法系列:5分钟了解哈希算法

    前言 哈希算法是现代密码体系中的一个重要组成部分。大家比较感兴趣的数字货币,就使用了哈希算法。 哈希算法简介 哈希...

  • java中round方法舍入问题

    Math.round()是java中非常常用的一个方法,用来取整舍入,但使用时发现有不同的舍入结果 既不完全是 四...

  • Bigdecimal 八种舍入模式

    1、ROUND_UP 舍入远离零的舍入模式。在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。注...

  • Scrypt算法

    Scrypt算法简介 Scrypt是内存依赖型的POW算法,莱特币采用此算法。第一个使用Scrypt算法的数字货币...

  • tableau常用函数

    一、数字函数 1.ROUND(number,[decimals]) 将数字舍入为指定位数。decimals参数指定...

  • Java 实现 Snowflake 算法

    本文介绍 Java 实现 Snowflake 算法生成分布式 ID。 目录 Snowflake 算法简介 示例 总...

  • python cookbook第三章笔记

    3.1 数字的四舍五入 你想对浮点数执行指定精度的舍入运算。 对于简单的舍入运算,使用内置的 round(valu...

网友评论

      本文标题:java 中的数字舍入算法简介

      本文链接:https://www.haomeiwen.com/subject/lrtxnttx.html