关于BigDecimal类的常用方法与的舍入方式
本文最后更新于:2023年11月9日 晚上
关于BigDecimal类的常用方法与的舍入方式(用于高精度的浮点运算)
在实际开发中,难免会遇到数据值的计算,关于小数的两种浮点型(float,double),也就是单精度与双精度。
那么就需要一个类帮我们解决一些问题,下面介绍两种浮点型的区别和BigDecimal类的使用
两种类型的区别:
1.在内存中占有的字节数:单精度是4字节,而双精度是8字节
2. 有效数字位数:单精度有效位是8位,双精度是16位
3. 数值取值范围:单精度表示范围 -3.40E+383.40E+38,双精度表示范围 -1.79E+308-1.79E+308
4. 在程序中处理速度不同:一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快(网上是这样说,还没有感受过)
5. 两者在使用定义时:如果定义是不声明,默认的小数类型就是double,如果要使用float就必须进行强制转换
6. 例如:float a=1.5; 会编译报错,正确的写法 float a = (float)1.5;或者float a = 1.5f;(f或F都可以不区分大小写)
BigDecimal类:
先介绍下 BigDecimal 类的常用方法
BigDecimal 类路径:java.math.BigDecimal,BigDecimal 的父类是一个抽象类Number 类路径 java.lang.Number
比如很多熟悉的基本类型包装类:Byte、Long、Integer都来继承自此类
作用:用于高精度的浮点运算
创建 BigDecimal类(构造方法)
1
2
3
4
5new BigDecimal(int) 创建一个具有参数所指定整数值的对象。
new BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
new BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
new BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。
注:在创建BigDecimal对象时,如果直接传入的是小数类型的值,有可能会造成精度损失,推荐传入String类型常用方法
1
2
3
4
5
6
7
8
9
101.BigDecimal add(BigDecimal value); 加法,求两个BigDecimal类型数据的和。
2.BigDecimal subtract(BigDecimal value); 减法,求两个BigDecimal类型数据的差。
3.BigDecimal multiply(BigDecimal value); 乘法,求两个BigDecimal类型数据的积。
4.BigDecimal divide(BigDecimal divisor); 除法,求两个BigDecimal类型数据的商。
5.BigDecimal remainder(BigDecimal divisor); 求余数,求BigDecimal类型数据除以divisor的余数。
6.BigDecimal max(BigDecimal value); 最大数,求两个BigDecimal类型数据的最大值。
7.BigDecimal min(BigDecimal value); 最小数,求两个BigDecimal类型数据的最小值。
8.BigDecimal abs(); 绝对值,求BigDecimal类型数据的绝对值。
9.BigDecimal negate(); 相反数,求BigDecimal类型数据的相反数。
10.BigDecimal setScale(int newScale, int roundingMode); 按指定舍入模式保留小数位数
怎么用?下面给大家举个加法的例子 BigDecimal add(BigDecimal value);:
1 |
|
- 获取 BigDecimal 对象中不同返回值类型
1
2
3
4
5String toString() 将BigDecimal对象的数值转换成字符串。
double doubleValue() 将BigDecimal对象中的值以双精度数返回。
float floatValue() 将BigDecimal对象中的值以单精度数返回。
long longValue() 将BigDecimal对象中的值以长整数返回。
int intValue() 将BigDecimal对象中的值以整数返回。
BigDecimal类的8中不同的舍入方式:
1 |
|
案例:
假设现在有一个浮点型小数我们需要按照我们的要求进行保留小数位:
1 |
|