zoukankan      html  css  js  c++  java
  • java.math包简介

    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 他在使用上也可以理解为"常量" 一样的存在
  • 相关阅读:
    阿里DatatX mysql8往 Elasticsearch 7 插入时间数据 时区引发的问题
    通俗易懂 k8s (3):kubernetes 服务的注册与发现
    ReplicaSet 和 ReplicationController 的区别
    使用Go module导入本地包
    k8s之statefulset控制器
    终于成功部署 Kubernetes HPA 基于 QPS 进行自动伸缩
    Atitit drmmr outline org stat vb u33.docx Atitit drmmr outline org stat v0 taf.docx Atitit drmmr out
    Atitit all diary index va u33 #alldiary.docx Atitit alldiaryindex v1 t717 目录 1. Fix 1 2. Diary deta
    Atitit path query 路径查询语言 数据检索语言 目录 1.1. List map >> spel 1 1.2. Html数据 》》Css选择符 1 1.3. Json 》map》
    Atitit prgrmlan topic--express lan QL query lan表达式语言 目录 1. 通用表达语言(CEL) 1 1.1. 8.2 功能概述 1 1.2. Ongl
  • 原文地址:https://www.cnblogs.com/JonaLin/p/11089686.html
Copyright © 2011-2022 走看看