float和double类型的主要设计目标是为了科学计算和工程计算。
但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。
a、将double类型转化为bigdecimal
Double a=1.23;或者 double a = 1.23
BigDecimal c = BigDecimal.valueOf(a);
其实是先将a转换为string类型 调用a.toString 然后调用 构造方法 也就是 BigDecimal c = new BigDecimal(a.toString)
不能使用
BigDecimal decimal= new BigDecimal(1.23);
这样输出的结果不可预料
b、将String转化为BigDecimal
String a= "1.23";
BigDecimal b = new BigDecimal(a)
c、将long转化为BigDecimal
long a= 333l;
BigDecimal b = BigDecimal.valueOf(a);
d、将int类型转化为BigDecimal
int a = 123;
BigDecimal b = BigDecimal.valueOf(a);
总结:将任意类型转化为BigDecimal
先转化为String 然后调用构造方法 new BigDecimal(String val)
//可以将String double long Integer转化为BigDecimal 其他类型可以扩展
public static BigDecimal geBigDecimal1(Object value){
if (value == null){
return null;
}
if (value instanceof String || value instanceof Long || value instanceof Integer || value instanceof Double){
return new BigDecimal(ObjectUtils.toString(value));
}
return null;
}
public BigDecimal add(BigDecimal value); //加法
public BigDecimal subtract(BigDecimal value); //减法
public BigDecimal multiply(BigDecimal value); //乘法
public BigDecimal divide(BigDecimal value); //除法
public static void main(String[] args)
{
BigDecimal a = new BigDecimal("4.5");
BigDecimal b = new BigDecimal("1.5");
System.out.println("a + b =" + a.add(b));
System.out.println("a - b =" + a.subtract(b));
System.out.println("a * b =" + a.multiply(b));
System.out.println("a / b =" + a.divide(b));
}
/*由数字字符串构造BigDecimal的方法
*设置BigDecimal的小数位数的方法
*/
import java.math.BigDecimal;
//数字字符串
String StrBd="1048576.1024";
//构造以字符串内容为值的BigDecimal类型的变量bd
BigDecimal bd=new BigDecimal(StrBd);
//设置小数位数,第一个变量是小数位数,第二个变量是取舍方法(四舍五入)
bd=bd.setScale(2, BigDecimal.ROUND_HALF_UP);
//转化为字符串输出
转化为BigDecimal后 数据进行比较大小 使用a.compareto(b)方法
BigDecimal a = new BigDecimal("23")
BigDecimal a = new BigDecimal("23.33")
//返回值 1 表示 a>b -1表示a
比较时候不忽略精度时候使用 equals
//输出false
System.out.println(new BigDecimal("1.2").equals(new BigDecimal("1.20")));
//输出true
System.out.println(new BigDecimal("1.2").compareTo(new BigDecimal("1.20")) == 0);
结论:对于BigDecimal的大小比较,用equals方法的话会不仅会比较值的大小,还会比较两个对象的精确度,而compareTo方法则不会比较精确度,只比较数值的大小。