zoukankan      html  css  js  c++  java
  • [十五]java.math包简介,RoundingMode与MathContext

    java.math包提供了java中的数学类
    包括基本的浮点库、复杂运算以及任意精度的数据运算
     
    image_5bd6634a_5366
    '可以看得到,主要包括三个类一个枚举
    BigDecimal和BigInteger接下来会详细介绍
    先说下另外两个
     

    RoundingMode

    舍入行为/ 近似模式

    image_5bd6634a_227b
     
    对于很多计算,都可能涉及到精度的问题
    比如两个数进行除法, 十进制下,1/3 
    结果为无限循环小数
    显然计算机中不可能保存这个无限循环的小数,那么这个 0.3333333......
    你到底要近似成为多少?
    0?  0.5? 0.33? 1?
    RoundingMode 就是这么一个存在
    如同它的名字一样,近似模式
    为可能丢弃精度的数值操作指定一种舍入行为

    舍入模式

    UP 远离零方向舍入
    DOWN 向零方向舍入
    image_5bd6634a_35c1
    CEILING 向正无限大方向舍入
    FLOOR 向负无限大方向舍入
    image_5bd6634a_53c9
    HALF_UP 向最接近数字方向舍入
    如果与两个相邻数字的距离相等,则向上舍入
    HALF_DOWN 向最接近数字方向舍入
    如果与两个相邻数字的距离相等,则向下舍入
    HALF_EVEN
    向最接近数字方向舍入
    如果与两个相邻数字的距离相等,则向相邻的偶数舍入
    HALF_UP/ HALF_DOWN /  HALF_DOWN  都是最接近数字舍入
    不过如果两个相邻的数字距离相等,将会采取不同的模式
    HALF_UP就是平时的四舍五入
     
     
    UNNECESSARY 用于断言的舍入模式
    请求的操作具有精确的结果,不需要进行舍入
     

    示例

    image_5bd6634a_25d7
     
    拥有静态的valueOf方法,对BigDecimal中的常量,进行映射转换
    返回RoundingMode对象
    image_5bd6634b_40d0
     
    这个enum 是打算用来替代 BigDecimal中的舍入模式常量
    (BigDecimal.ROUND_UP、BigDecimal.ROUND_DOWN 等)
    所以后续写代码使用这个枚举
     

    MathContext

    计算上下文/数学规则
    image_5bd6634b_6c63
    RoundingMode 是舍入模式的抽象描述,仅仅描述了舍入的规则
    但是运算中还有一些其他的规则,比如
    保留几位有效数字?
    MathContext则是针对于计算的更进一步抽象
    是封装上下文设置的不可变对象,它描述数字运算符的某些规则
    他拥有两个属性
    precision:某个操作使用的数字个数;结果舍入到此精度
    roundingMode:一个 RoundingMode 对象,该对象指定舍入使用的算法
    image_5bd6634b_4bf5
    针对于这两个属性,也提供了两个方法进行获取
    image_5bd6634b_364f
     

    构造方法

    MathContext(int setPrecision, RoundingMode setRoundingMode)
              构造一个新的 MathContext,它具有指定的精度和舍入模式
    MathContext(int setPrecision)
              构造一个新的 MathContext,它具有指定的精度和 HALF_UP 舍入模式
    调用上一个构造方法
    image_5bd6634b_c46
    MathContext(String val)
              根据字符串构造一个新的 MathContext
    注意:该字符串的格式必须与 toString() 方法生成的字符串的格式相同
    不是可以随便写的!!
     

    equals

    equals方法已经被重写,对比的是两个属性的数值是否相等
    image_5bd6634b_7ac0
     
     

    toString

    注意这个格式可以用于构造对象
    image_5bd6634b_fdf
     

    常量

    我们刚才已经说明,MathContext 就是针对于运算中的一些规则进行描述的类型
    对于一些规定,已经内置了几个静态对象供我们使用
    static MathContext DECIMAL128
    其精度设置与 IEEE 754R Decimal128 格式(即 34 个数字)匹配
    舍入模式为 HALF_EVEN
    这是 IEEE 754R 的默认舍入模式
    static MathContext DECIMAL32
    其精度设置与 IEEE 754R Decimal32 格式(即 7 个数字)匹配
    舍入模式为 HALF_EVEN
    这是 IEEE 754R 的默认舍入模式
    static MathContext DECIMAL64
    其精度设置与 IEEE 754R Decimal64 格式(即 16 个数字)匹配
    舍入模式为 HALF_EVEN
    这是 IEEE 754R 的默认舍入模式
    static MathContext UNLIMITED
    其设置具有无限精度算法所需值的 MathContext 对象
     
    image_5bd6634b_59c9
     

    总结

    RoundingMode  与MathContext 是针对舍入模式以及运算规则的一个抽象
    RoundingMode 就是个枚举
    MathContext 他在使用上也可以理解为"常量" 一样的存在
     
     
     
  • 相关阅读:
    跨域上传图片的尝试过程,最终成功了。哈哈
    老子再也不加什么所谓的技术群了,顶撞群主的话,就被踢了。
    开发使用的插件
    设计原则记录
    程序员修神之路--redis做分布式锁可能不那么简单
    程序员过关斩将--面试官再问你Http请求过程,怼回去!
    程序员修神之路--问世间异步为何物?
    程序员修神之路--提高网站的吞吐量
    程序员过关斩将--你的业务是可变的吗(福利你领了吗)
    程序员修神之路--🤠分布式高并发下Actor模型如此优秀🤠
  • 原文地址:https://www.cnblogs.com/noteless/p/9868817.html
Copyright © 2011-2022 走看看