Java常⽤类:BigDecimal类
⽂章⽬录
思考什么是BigDecimal类
以下程序结果什么?
package;
public class Test {
public static void main(String[] args){
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);
}
}
按照惯有逻辑,我们认为程序输出结果应为0.1,但其实不是,输出结果如下:
为什么?
因为double和float类型都以数字的近似值存储,⽐如我们想要存储double类型的数据1.0,那么在内存中实际存储并不是1.0,⽽
是0.9999999。将近似值代⼊运算,结果就会出现像上⾯那样的误差。
在⽇常⽣活中,像这样的数值误差可以忽略,但在很多实际应⽤中(⽐如在银⾏)需要精确运算,⽽double以近似值存储的⽅式不再符合要求,这时就需要借助BigDecimal类。
概述
Java在java.math包中提供的API类BigDecimal,⽤来对超过16位有效位的数进⾏精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应⽤中,需要对更⼤或者更⼩的数进⾏运算和处理。fl
oat和double只能⽤来做科学计算或者是⼯程计算,在商业计算中要⽤java.math.BigDecimal。
创建⽅式
BigDecimal bd =new BigDecimal("1.0");
成员⽅法
public BigDecimal add(BigDecimal value);//加法
public BigDecimal subtract(BigDecimal value);//减法
public BigDecimal multiply(BigDecimal value);//乘法
public BigDecimal divide(BigDecimal value,int scale,RoundingMode mode);//除法
注意:在除法中,参数scale表⽰保留的⼩数位数,参数mode表⽰指定⼩数位数的取舍模式,通常采⽤四舍五⼊的模式,mode取值
为BigDecimal.ROUND_HALF_UP表⽰⽤四舍五⼊的⽅法保留⼩数位数。
举例
package;
bigdecimal除法保留小数import BigDecimal;
public class Test {
public static void main(String[] args){
BigDecimal bd1=new BigDecimal("1.0");
BigDecimal bd2=new BigDecimal("0.9");
System.out.println(bd1.add(bd2));//加法
System.out.println(bd1.subtract(bd2));//减法
System.out.println(bd1.multiply(bd2));//乘法
System.out.println(bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP));//除法}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。