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

RoundingMode

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

舍入模式

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

示例

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

MathContext

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

构造方法

MathContext(int setPrecision, RoundingMode setRoundingMode)
          构造一个新的 MathContext,它具有指定的精度和舍入模式
MathContext(int setPrecision)
          构造一个新的 MathContext,它具有指定的精度和 HALF_UP 舍入模式
调用上一个构造方法
MathContext(String val)
          根据字符串构造一个新的 MathContext

注意:该字符串的格式必须与 toString() 方法生成的字符串的格式相同
不是可以随便写的!!

 

equals

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

toString

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

常量

我们刚才已经说明,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 对象
 
 

总结

RoundingMode  与MathContext 是针对舍入模式以及运算规则的一个抽象
RoundingMode 就是个枚举
MathContext 他在使用上也可以理解为"常量" 一样的存在
 

 
 

[十五]java.math包简介,RoundingMode与MathContext的更多相关文章

  1. java.math包简介

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

  2. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  3. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  4. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

  5. JAVA math包

    Math类: java.lang.Math 类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...

  6. java.util包简介

    java.util包含集合框架.遗留的 collection 类.事件模型.日期和时间设施.国际化和各种实用工具类(字符串标记生成器.随机数生成器和位数组.日期Date类.堆栈Stack类.向量Vec ...

  7. java.math包下计算浮点数和整数的类

    (1)BigIntege:实现任意精度的整数运算.(2)BigDecimal:实现任意精度的浮点运算. 例如: 使用BigDecimal进行浮点数比较 import java.math.BigDeci ...

  8. Java基础(三十五)Math、Random类和数字格式化(String.format方法)

    一.Math类 Math类常用的方法: public static long abs (double a) 返回a的绝对值 public static double max (double a,dou ...

  9. java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的

    本文将详解java中的异常和异常处理机制 异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常. Java异常的分类和类结构图 1.Java中的所 ...

随机推荐

  1. iptv

    # -*- coding: utf-8 -*- import datetime, time, json, re, os #from pwd import getpwnam #quality str_q ...

  2. POJ3630

    Tire树裸题,一开始写动态的字典树,然后TLE,每次new一个新节点耗费时间较多.后来改成数组模拟的. //#include <bits/stdc++.h> #include <c ...

  3. copy与mutableCopy的区别总结

    1.不可变类型(不管是集合还是非集合),copy结果,不产生新对象,浅拷贝:不可变类型(不管是集合还是非集合),mutableCopy结果,产生新对象,深拷贝.2.可变类型(不管是集合还是非集合),c ...

  4. Unknown return value type [java.lang.Boolean]] with root cause

    添加@responsebody 为什么呢 ? 因为在进行ajax传输的时候  我已指定传输的类型为 json数据类型 要是不加的话 它只是Boolean类型 而不是json类型

  5. Vue 中动态添加class(使用v-bind:class)

    今天在Vue中动态修改类名,元素的样式就是不改变,类名也没有加上去,里面的问题具体我还是不太清楚,有可能是因为自己不认真,把 :class= 后面的内容的格式给整错了,下面将正确的做法记录一下,便于以 ...

  6. 解决ios10以上H5页面手势、双击缩放问题

    html:<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable= ...

  7. 33 ArcToolBox学习系列之数据管理工具箱——投影与变换(Projections and Transformations)未完待续……

    工具箱位置 打开ArcToolBox,找到工具集Projections and Transformations,位置如下:ArcToolbox--Data Management Tools--Proj ...

  8. pycharm 中 django 导入静态文件不提示补全

    File—>setting----->Languages & Frameworks ------> Python Template  Languages ------> ...

  9. JDK、JRE

    JRE: java Runtime environment (java运行环境) JVM:java virtual machine (java 虚拟机) java程序就在jvm中运行. JDK: ja ...

  10. .NET 应用架构电子书中文版

    <.NET 微服务:容器化 .NET 应用架构指南> 本书主要介绍了基于容器和微服务的应用架构和设计原则,以及基于 .NET Core 和 Docker 容器的应用程序开发实践.为了让大家 ...