文章目录
- 引入
- BigDecima
- BigDecima的使用
- 舍入模式
- up
- down
- CEILING
- FLOOR
- half_UP
- half_UP
- BigDecimal存储原理
- 总结
引入
知识引入:如下图
0.266小数部分二进制需要55位存储,如果我们double接收那么将丢掉最后三位,所以我们在代码中进行小鼠的加减运算结果有时候并不是我们想要的
BigDecima
- 用于小数的精确计算
- 用来表示很大的小数
import java.math.BigDecimal;
import java.math.BigInteger;public class BigDecimal1 {public static void main(String[] args) {//通过传递字符串表示的小数来创建对象BigDecimal bigDecimal=new BigDecimal("0.01");BigDecimal bigDecimal1=new BigDecimal("0.09");System.out.println(bigDecimal1);//0.01//通过静态方法来获取对象BigDecimal bigDecimal2=BigDecimal.valueOf(10);BigDecimal bigDecimal3=BigDecimal.valueOf(10);System.out.println(bigDecimal2==bigDecimal3);//true}
}
细节:
如果表示数字不大不超过double范围 用静态方法
如果较大 超范围 就用构造方法
如果我们传递是0到10之间整数 那么方法会返回已经创建好的对象 不会重新创建
BigDecima的使用
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;public class BigDecimal1 {public static void main(String[] args) {//通过传递字符串表示的小数来创建对象BigDecimal bigDecimal=new BigDecimal("0.01");BigDecimal bigDecimal1=new BigDecimal("0.09");System.out.println(bigDecimal1);//0.01//通过静态方法来获取对象BigDecimal bigDecimal2=BigDecimal.valueOf(10);BigDecimal bigDecimal3=BigDecimal.valueOf(10);System.out.println(bigDecimal2==bigDecimal3);//true//加法BigDecimal bigDecimal4=BigDecimal.valueOf(10.0);BigDecimal bigDecimal5=BigDecimal.valueOf(2.0);BigDecimal add = bigDecimal4.add(bigDecimal5);System.out.println(add);//打印结果12//除法BigDecimal divide = bigDecimal4.divide(bigDecimal5);System.out.println(divide);//打印结果为5.0//除法2 除不尽的数用这个BigDecimal bigDecimal7=BigDecimal.valueOf(10.0);BigDecimal bigDecimal8=BigDecimal.valueOf(3.0);//下面第一个传入的表示除数 第二个是要保留小数点后几位 第三位是采用什么运输模式 我这边选择的是四舍五入BigDecimal divide1 = bigDecimal7.divide(bigDecimal8, 2, RoundingMode.HALF_UP);System.out.println(divide1);//3.33 打印结果}
}
舍入模式
up
远离0的
down
向0
CEILING
向正无穷大
FLOOR
向负无穷大
half_UP
四舍五入,如果距离相等则向上舍入.如果被舍去部分=>0.5则舍入行为同UP 相反DOWN
half_UP
BigDecimal存储原理
BigDecimal在底层也是一个数组 他拿到一个小数他会把小数每一位分开存在一个数组内然后用ascii表对应数字表示