## Java中BigDecimal的应用 原

liangtee

public class MathUtil {

// 加法
public static Double add(double a,double b,int scal) throws Exception{

BigDecimal add1 = conversionToBigDecimal(a);
BigDecimal add2 = conversionToBigDecimal(b);
Double result = add1.add(add2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
return result;
}

// 减法
public static Double subtract(double a,double b,int scal) throws Exception{

BigDecimal subtract1 = conversionToBigDecimal(a);
BigDecimal subtract2 = conversionToBigDecimal(b);
Double result = subtract1.subtract(subtract2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
return result;
}

// 乘法
public static Double multiply(double a,double b,int scal) throws Exception{

BigDecimal multiply1 = conversionToBigDecimal(a);
BigDecimal multiply2 = conversionToBigDecimal(b);
Double result = multiply1.multiply(multiply2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
return result;
}

// 除法
public static Double divide(double a,double b,int scal) throws Exception{

BigDecimal divide1 = conversionToBigDecimal(a);
BigDecimal divide2 = conversionToBigDecimal(b);
Double result = divide1.divide(divide2,scal,BigDecimal.ROUND_HALF_UP).doubleValue();
return result;

}

// 类型转换

public static BigDecimal conversionToBigDecimal(Object obj) throws Exception
{
if (obj instanceof Double)
{
return new BigDecimal(obj.toString());
}
else if (obj instanceof Float)
{
return new BigDecimal(obj.toString());
}
else if (obj instanceof Integer)
{
return new BigDecimal(obj.toString());
}
else if (obj instanceof Long)
{
return new BigDecimal(obj.toString());
}
else if (obj instanceof Byte)
{
return new BigDecimal(obj.toString());
}
else if (obj instanceof Short)
{
return new BigDecimal(obj.toString());
}
else
{
throw new Exception("不能转换");
}
}

BigDecimal.setScale()方法用于格式化小数点

setScale(1)

setScale(1,BigDecimal.ROUND_DOWN)

setScale(1,BigDecimal.ROUND_UP)

setScale(1,BigDecimal.ROUND_HALF_UP)

setScaler(1,BigDecimal.ROUND_HALF_DOWN)

scale指的是你小数点后的位数。scale()就是BigDecimal类中的方法。如
BigDecimal b = new BigDecimal("123.456");
b.scale(),返回的就是3

roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种，如
BigDecimal.ROUND_HALF_UP表示的就是4舍5入

pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)的意思是说：我用一个BigDecimal对象除以divisor后的结果，并且要求这个结果保留有scale个小数位，roundingMode表示的就是保留模式是什么，是四舍五入啊还是其它的

BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("mData=" + mData);

© 著作权归作者所有

### liangtee

Java Double相加出现的怪事

onedotdot
2017/11/05
0
0
Hibernate QBC语言

ddtt
2011/12/22
0
0
JRuby 1.7.21 发布，Java 版的 Ruby 解释器

JRuby 1.7.21 发布，值得关注的更新如下： 31 issues fixed for 1.7.21 Java integration performance enhancements paths representing files within jars work better with core filesyst......

oschina
2015/07/08
632
0
180706-BigDecimal除法的精度问题

BigDecimal除法的精度问题 在使用BigDecimal的除法时，遇到一个鬼畜的问题，本以为的精度计算，结果使用返回0，当然最终发现还是自己的使用姿势不对导致的，因此记录一下，避免后面重蹈覆辙 ...

2018/07/06
0
0
JavaSE|BigDecimal

2018/10/24
0
0

o0无忧亦无怖

4
0
Mac Vim配置

1.升级 vim　　 我自己 MacBook Pro 的系统还是 10.11 ，其自带的 vim 版本为 7.3 ，我们将其升至最新版： 使用 homebrew ： brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger

5
0
vmware安装Ubuntu上不了网？上网了安装不了net-tools，无法执行ifconfig？

1.重新设置网络适配器还是不行，如下指定nat 2.还需要指定共享网络，我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr

2
0

svn:E210007 svn: Cannot negotiate authentication mechanism 执行下面代码即可 sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap...

2
0
java8的时间和`Date`的对比

java8的时间和Date的对比 java8提供了新的时间接口。相对Date,Calendar,个人感觉最大的好处是对时间操作的学习成本很低，比Calendar低。 1. LocalDate,LocalTime,LocalDateTime LocalDate 代...

3
0