如果基本的整数和浮点数精度不能够满足要求,那么可以使用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表示的就是4舍5入。
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
package 第3章;
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);