java中的数学计算(大整数,小数计算精度)

3 篇文章 0 订阅
2 篇文章 0 订阅

BigInteger:可以实现大整数计算

构造方法:BigInteger(String val)

注意:寻常Integer是有着明确的数字上限的,它的数值上限是2147483647。因此,如果需要表示超过此数的值,则应该使用BigInteger作为数据类型。

BigInteger做+-*/运算时也是对应着add(val),subtract(val),multiply(val),divide(val)函数;

且其求余运算需要用到函数divideAndRemainder(val),括号内为除数,该函数的返回值为包含2个元素的BigInteger的数组,第一个元素为得到的商,第二个元素为余数。



在java中对小数进行运算时,会出现计算精度的问题,特别是float与double类型很容易丢失精度。所以为了能够精确表示,在计算浮点数时,java提供了BigDecimal(String val)类。


BigDecimal add(BigDecimal val) //BigDecimal 加法 


BigDecimal subtract (BigDecimal val) //BigDecimal 减法 


BigDecimal multiply (BigDecimal val)  //BigDecimal 乘法 


BigDecimal divide (BigDecimal val,RoundingMode mode)  除法 




具体使用 计算: 


   
  加:   a.add(b); 


  减: a.subtract(b); 


  乘:   a.multiply(b); 


  除:   a.divide(b,2);//2为精度取值 
除法细解: 
  //注意以下相除会抛出异常,原因: 通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常  
        //BigDecimal divideBg = a.divide(b);   
        //解决方法是:设置精确度;就是给divide设置精确的小数点 
divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)   
        //其中的第二个参数表示的是:保留小数点之后多少位  


BigDecimal不整除抛出的异常,请设置精确度! 
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 
at java.math.BigDecimal.divide(BigDecimal.java:1278) 
at main.Main.main(Main.java:41) 


下面我们来看看除法的详细说明: 
   divide(BigDecimal divisor, int scale, introundingMode) 




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) 



部分内容引自Blog:http://zhangyinhu8680.iteye.com/blog/1536397

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值