bigdecimal运算(bigdecimal运算方法)

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

如何利用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();???

}???

};

BigDecimal运算

BigDecimal?bignum1?=newBigDecimal("10");

BigDecimal?bignum2?=newBigDecimal("5");

BigDecimal?bignum3?=null;

//加法

bignum3?=??bignum1.add(bignum2);? ? ? ?

//减法

bignum3?=?bignum1.subtract(bignum2);??

//乘法

bignum3?=?bignum1.multiply(bignum2);??

//除法??bignum1除数? ?bignum2被除数

bignum3?=?bignum1.divide(bignum2);??

//保留小数? ? ?2-保留两位

decimal.setScale(2,BigDecimal.ROUND_HALF_DOWN);

BigDecimal.ROUND_DOWN? ?向下取整

BigDecimal.ROUND_UP? ?向上取整

BigDecimal.ROUND_CEILING? ?负数向上取整

BigDecimal.ROUND_FLOOR??负数向下取整

BigDecimal.ROUND_HALF_UP??四舍五入? 五进

BigDecimal.ROUND_HALF_DOWN??四舍五入? 五不进

BigDecimal.ROUND_HALF_EVEN??舍弃部分左边的数字为偶数,则作 ROUND_HALF_DOWN??舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP

stripTrailingZeros()? 去除小数点后边的零

new BigDecimal("99.80")..stripTrailingZeros();// 99.8

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) 创建一个具有参数所指定以字符串表示的数值的对象。

以上内容参考:百度百科-BigDecimal

BigDecimal和Int类型的转换,以及BigDecimal的常用运算

Int类型转换为bigdecimal类型:先将int转为String,再通过BigDecimal的构造方法去创建

BigDecimal price = new BigDecimal(String str);

Bigdecimal类型相加

BigDecimal newDeposit=price.add(oldDecimal);

扩充

add(BigDecimal)BigDecimal对象中的值相加,然后返回这个对象。

subtract(BigDecimal)BigDecimal对象中的值相减,然后返回这个对象。

multiply(BigDecimal)BigDecimal对象中的值相乘,然后返回这个对象。

divide(BigDecimal)BigDecimal对象中的值相除,然后返回这个对象。

toString()将BigDecimal对象的数值转换成字符串。

doubleValue()将BigDecimal对象中的值以双精度数返回。

floatValue()将BigDecimal对象中的值以单精度数返回。

longValue()将BigDecimal对象中的值以长整数返回。

intValue()将BigDecimal对象中的值以整数返回。

怎么将BigDecimal转换成Int

1、将BigDecimal转换成Int:

BigDecimala=newBigDecimal(12.88);

intb=a.intValue();

System.out.println(b);//b=12;

2、C#中将decimal转int

try{

intnumber=Decimal.ToInt32(xxx);

}

catch(OverflowExceptione)

{

//decimal值超出int值范围

}

扩展资料

使用BigDecimal类来进行计算:

1、用float或者double变量构建BigDecimal对象。

2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。

3、把BigDecimal对象转换成float,double,int等类型。可以使用BigDecimal的构造方法或者静态方法的valueOf()方法把基本类型的变量构建成BigDecimal对象。

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) 第一参数表示除数, 第二个参数表示小数点后保留位数,第三个参数表示舍入模式,只有在作除法运算或四舍五入时才用到舍入模式。

(责任编辑:IT教学网)

更多
上一篇:没有了

推荐CSS教程文章