bigdecimal加减(bigdecimal加减运算)

http://www.itjxue.com  2023-02-20 21:37  来源:未知  点击次数: 

java中BigDecimal 的加减乘除和“+”“-”“*”“/”有什么区别

BigDecimal用作商业计算的。

BigDecimal aDouble =new BigDecimal(1.22);? ? ?输出:1.2199999999999999733546474089962430298328399658203125

BigDecimal aString = new BigDecimal("1.22");? ?输出:1.22

以上两者输出结果是不一样的。

原因:

double的构造方法有不可预知性。

String的构造方法是固定的值。

所以如果类型是Double的话,而且需要精确计算,就用下面方法:

Double.toString(double)方法,可以先转为String,然后再用new BigDecimal("")构造方法。

注意:BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值

Demo测试

????public?static?final?void?main(String[]?args)?{

????????BigDecimal?aBigDecimal?=?new?BigDecimal("1.1");

????????BigDecimal?bBigDecimal?=?new?BigDecimal("2.0");

????????

????????BigDecimal?subtract?=?bBigDecimal.subtract(aBigDecimal);

????????System.out.println("使用BigDecimal进行相减计算:"?+?subtract.doubleValue());

????????System.out.println("直接相减:?"?+?(2.0?-?1.1));

结果:

使用BigDecimal进行相减计算:0.9

直接相减:?0.8999999999999999

如何利用Java中的BigDecimal实现加减乘除功能

仅做参考:

import?java.math.BigDecimal;???

/**??

*?由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精??

*?确的浮点数运算,包括加减乘除和四舍五入。??

*/??

public?class?Arith{?//默认除法运算精度???

private?static?final?int?DEF_DIV_SCALE?=?10;?//这个类不能实例化???

private?Arith(){???

}???

/**??

*?提供精确的加法运算。??

*?@param?v1?被加数??

*?@param?v2?加数??

*?@return?两个参数的和??

*/??

public?static?double?add(double?v1,double?v2){???

BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));???

BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));???

return?b1.add(b2).doubleValue();???

}???

/**??

*?提供精确的减法运算。??

*?@param?v1?被减数??

*?@param?v2?减数??

*?@return?两个参数的差??

*/??

public?static?double?sub(double?v1,double?v2){???

BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));???

BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));???

return?b1.subtract(b2).doubleValue();???

}???

/**??

*?提供精确的乘法运算。??

*?@param?v1?被乘数??

*?@param?v2?乘数??

*?@return?两个参数的积??

*/??

public?static?double?mul(double?v1,double?v2){???

BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));???

BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));???

return?b1.multiply(b2).doubleValue();???

}???

/**??

*?提供(相对)精确的除法运算,当发生除不尽的情况时,精确到??

*?小数点以后10位,以后的数字四舍五入。??

*?@param?v1?被除数??

*?@param?v2?除数??

*?@return?两个参数的商??

*/??

public?static?double?div(double?v1,double?v2){???

return?div(v1,v2,DEF_DIV_SCALE);???

}???

/**??

*?提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指??

*?定精度,以后的数字四舍五入。??

*?@param?v1?被除数??

*?@param?v2?除数??

*?@param?scale?表示表示需要精确到小数点以后几位。??

*?@return?两个参数的商??

*/??

public?static?double?div(double?v1,double?v2,int?scale){???

if(scale0){???

throw?new?IllegalArgumentException(???

"The?scale?must?be?a?positive?integer?or?zero");???

}???

BigDecimal?b1?=?new?BigDecimal(Double.toString(v1));???

BigDecimal?b2?=?new?BigDecimal(Double.toString(v2));???

return?b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();???

}???

/**??

*?提供精确的小数位四舍五入处理。??

*?@param?v?需要四舍五入的数字??

*?@param?scale?小数点后保留几位??

*?@return?四舍五入后的结果??

*/??

public?static?double?round(double?v,int?scale){???

if(scale0){???

throw?new?IllegalArgumentException("The?scale?must?be?a?positive?integer?or?zero");???

}???

BigDecimal?b?=?new?BigDecimal(Double.toString(v));???

BigDecimal?one?=?new?BigDecimal("1");???

return?b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();???

}???

};

java中bigdecimal 类型的变量怎么相互加减乘除

如图

import?java.math.BigDecimal;

public?class?Test?{

????public?static?void?main(String[]?args)?{

????????//?BigDecimal是处理double精度问题的对象

????????BigDecimal?b1?=?new?BigDecimal("10");

????????BigDecimal?b2?=?new?BigDecimal("10");

????????//?结果

????????BigDecimal?result?=?null;

????????//?加

????????result?=?b1.add(b2);

????????System.out.println(result.doubleValue());

????????//?减

????????result?=?b1.subtract(b2);

????????System.out.println(result.doubleValue());

????????//?乘

????????result?=?b1.multiply(b2);

????????System.out.println(result.doubleValue());

????????//?除

????????result?=?b1.divide(b2);

????????System.out.println(result.doubleValue());

????}

}

20.0

0.0

100.0

1.0

bigdecimal加减乘除有哪些?

//BigDecimal add = ma.add(mb),System.out.println("加法:"+add)。BigDecimal sub =ma.subtract(mb),System.out.println("减法:"+sub)。

使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。

需要注意的是除法运算divide:

BigDecimal除法可能出现不能整除的情况,比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。

其实divide方法有可以传三个参数:public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 第一参数表示除数, 第二个参数表示小数点后保留位数,第三个参数表示舍入模式,只有在作除法运算或四舍五入时才用到舍入模式。

bigdecimal加减乘除是什么?

bigdecimal加减乘除如下:

1、//?加:

(1)BigDecimal?add?=?ma.add(mb)

(2)System.out.println("加法:"+add)

2、//?减:

(1)BigDecimal?sub?=?ma.subtract(mb)

(2)System.out.println("减法:"+sub)

3、//?乘:

(1)BigDecimal?mul?=?mb.multiply(md)

(2)System.out.println("乘法:"+mul)

4、//?除:

(1)BigDecimal?div?=?mb.divide(md)

(2)System.out.println("除法:"+div)

BigDecimal一共有4个构造方法:

BigDecimal(int) 创建一个具有参数所指定整数值的对象。

BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)

BigDecimal(long) 创建一个具有参数所指定长整数值的对象。

BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

(责任编辑:IT教学网)

更多

推荐PHP+MySQL视频文章