java 大数值BigInteger与BigDecimal

如果基本的整数和浮点数精度不能够满足要求,那么可以使用java.math包中的两个很有用的类:BigInteger与BigDecimal类。这两个类可以处理任意长度数字序列中的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
使用静态的valueOf方法可以讲普通的数据转化为大数值:
BigInteger a=BigInteger.valueOf(100);

BigInteger

/*  转换成BigInteger中的数,需要BigInteger.valueOf(); 加减乘除取余,不需要BigInteger.add()/subtract()/multiply()/divide()/A.mod(B),而是直接A.add(B)/A.subtract(B)
    java.math.*;还包括:A.compareTo(B),即A-B,如果A<B,则compareTo返回负值,如果A==B,则返回0,如果A>B,则返回正数
    */
**BigDecimal**
BigDecimal中的divide方法为:
pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的,你可以自己选!

其中:
CEILING 
          向正无限大方向舍入的舍入模式。
DOWN 
          向零方向舍入的舍入模式。
FLOOR 
          向负无限大方向舍入的舍入模式。
HALF_DOWN 
          向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。
HALF_EVEN 
          向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
HALF_UP 
          向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
UNNECESSARY 
          用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。
UP 
          远离零方向舍入的舍入模式。

scale指的是你小数点后的位数。比如123.456则scale就是3.
scale就是BigDecimal类中的方法。
b.scale();返回Bigdecimal中的小数点后的位数
你自己定义一个BigDecimal的对象调用一下就可以验证。
比如:BigDecimal b = new BigDecimal("123.456");
b.scale(),返回的就是3.

roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,你可以看一下,有很多种。
比如:BigDecimal.ROUND_HALF_UP表示的就是45入。
BigDecimal中的valueOf(long x ,int scale)用法:
返回的是BigDecimal的  x/(10^scale)的值,也就是返回了一个BigDecimal形式的  x除以10的scale次方的值。
例如:


package 第3章;
import java.math.*;
public class 第3章a
{
    public static void main(String[] args)
    {
      Long b=new Long("123456789");
      BigDecimal bg=BigDecimal.valueOf(b,3);
      System.out.println(bg);
     }
}
run:
123456.789
package3章;
import java.math.*;
import java.util.*;
import java.math.RoundingMode;   //注意:
public class 第3章a
{
    public static void main(String[] args)
    {
        BigDecimal a=BigDecimal.valueOf(100);
        BigDecimal b=BigDecimal.valueOf(3);
        a=a.divide(b,RoundingMode.HALF_UP);  // 不能直接是HALF_UP,必须是RoundingMode.HALF_UP,就算import java.math.RoundingMode也必须有RoundingMode.HALF_UP
        System.out.println(a);
    }          
}

int compareTo();    //(BigDecimal形式的A,如果不是,需要(BigDecimal.valueOf()).compareTo(BigDecimal.valueOf()B)

static BigDecimal valueOf(long x);
Long a=new Long("123124123123");
BigDecimal.valueOf(a);
static BigDecimal valueOf(long x , int scale);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值