文档章节

Java中BigDecimal的应用

liangtee
 liangtee
发布于 2012/12/27 11:11
字数 509
阅读 228
收藏 8

我们来看一看java中BigDecimal的用法

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方法

 

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

 

表示保留一位小数,默认用四舍五入方式
setScale(1)

 

直接删除多余的小数位,如2.35会变成2.3 
setScale(1,BigDecimal.ROUND_DOWN)

 

进位处理,2.35变成2.4 
setScale(1,BigDecimal.ROUND_UP)

 

四舍五入,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)

 

四舍五入,2.35变成2.3,如果是5则向下舍
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表示的就是保留模式是什么,是四舍五入啊还是其它的

 


注意点四

对于一般add、subtract、multiply方法的小数位格式化如下
BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("mData=" + mData);

© 著作权归作者所有

共有 人打赏支持
liangtee
粉丝 106
博文 94
码字总数 38111
作品 0
朝阳
程序员
私信 提问
Java Double相加出现的怪事

问题的提出: 编译运行下面这个程序会看到什么 [java] view plaincopy public class test { public static void main(String args[]) { System.out.println(0.05 + 0.01); System.out.print......

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

节 8.01 基本查询 以下是HQL/QBC/Native SQL三种查询策略 HQL策略: session.createQuery("FROM Category c where c.name like 'Laptop%'"); QBC策略: session.createCriteria(Category.cl......

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,当然最终发现还是自己的使用姿势不对导致的,因此记录一下,避免后面重蹈覆辙 ...

小灰灰Blog
2018/07/06
0
0
JavaSE|BigDecimal

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/darlingwood2013/article/details/83340508 JavaSE|BigDecimal 构造方法 成员方法 在运算的时候,float类型和...

叶晚林
2018/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

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: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

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部