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