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包简介的更多相关文章

  1. [十五]java.math包简介,RoundingMode与MathContext

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

  2. JAVA math包

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

  3. java.util包简介

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

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

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

  5. 【java.math.BigInteger】【转】常见问题

    好大的链接给原作 Q: 在java怎样将BigInteger类型的数据转成int类型的? A:BigInteger的intValue()可以获得int类型数值. Q: java.math.BigInt ...

  6. Java.lang 包 (包装类、String类、Math类、Class类、Object类)

    Java 的核心 API(Application Programming Interface)是非常庞大的,这给开发者带来了很大的方便. java.lang 包是 Java 的核心类库,它包含了运行 ...

  7. 九. 常用类库、向量与哈希3.Java语言包(java.lang)简介

    Java语言包(java.lang)定义了Java中的大多数基本类,由Java语言自动调用,不需要显示声明.该包中包含了Object类,Object类是整个类层次结构的根结点,同时还定义了基本数据类型 ...

  8. 网络编程2之Socket简介和java.net包

    一.Socket 通信链路的端点就被称为"套接字"(英文名Socket) 是提供给应用程序的接口 图文说明Socket Socket通信原理 二.java.net包 Java.ne ...

  9. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

随机推荐

  1. 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置

    VM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾 ...

  2. QT:提高QT Creator编译速度,配置预编译头Stable.h

    提高QT Creator编译速度,配置预编译头Stable.h QT Creator支持预编译头提高编辑速度,网上有些教程写得不详细,走了弯路,具体实现方法如下. (1)工程.PRO文件加入下面代码 ...

  3. Protocol Buffers 开发者指南

    欢迎来到 protocol buffers 的开发者指南.protocol buffers 是一个语言中立,平台中立针对通讯协议,数据存储和其他领域中对结构化数据进行序列化的扩展方法. 本文档主要针对 ...

  4. Android Studio基本使用

    1.    创建Android项目 1)    Application name:应用名称,launcher界面显示的 2)    Company Domain:公司域名(sprd.com) 3)   ...

  5. RedisTemplate zSet的使用, 根据点赞排序,和创建时间排序2种方式

    使用Redis 对问题下的回答按点赞数排序的思路; 1根据问题id查出所有的回答列表; 2吧回答的ids添加到zset1中; key为id,value为赞的数量;(用于点赞排行); //批量添加 Lo ...

  6. git梳理

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本地库管理命令 git init ...

  7. 如何使用IDEA运行 一个分布式的项目

    前一段时间,曾不止一次的尝试过,如何把一个分布式的maven项目,用IDE运行起来.连续的几次失败,让我明白之前启动的方式是有问题的.因此把正确的启动方式整理了一下 .引以为戒 一.起初启动失败的原因 ...

  8. 用了 EventBus 不要多用其他的通讯功能

    EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间的通信.主要功能是替代Intent,Handler,BroadCast

  9. 剑指offer32----之字形打印一颗二叉树

    题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 思路 在这里我们如果单纯的使用队列去弄的话,会很 ...

  10. MQTT协议 Websocket JS客户端

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...