decimal与BigDecimal用法

MySQL中 :

 精度类型用DECIMAL来保留准确的精度类型,对于常用的货币数据,钱~

column_name   DECIMAL(P, D);

P为有效数字的精度,D为小数点后的位数~  

D不写默认是0,P不写默认是10,那么就成这样了~     column_name DECIMAL;

Java中:

那么在数据库中存完了,接着就是取数据了~

开发中我们如果直接拿过来用的话那绝对就会出错了

System.out.println((1.01 + 2.02) == 3.03 );
System.out.println(new Float(1.01 + 2.02).equals(3.03) );
System.out.println(new Float(1.01 + 2.02) == (3.03) );
System.out.println(new Float(1.01 + 2.02) == new Float(3.03) );

以上结果都是错~, 并不是等于3.03,实际上输出的是3.0300000002,无论是float还是double浮点数,都会失去精度,所以要用到BigDecimal了

创建BigDecimal主要两种方法:

BigDecimal b1 = new BigDecimal("1.34");//1.34  
BigDecimal b2 = BigDecimal.valueOf(1.34);//1.34  

而直接new的话,会丢失精度

BigDecimal one1 = new BigDecimal(1.34);//1.3400000000000000799360577730112709105014801025390625 

除了上述两种,特殊的0, 1, 10可以写成:

BigDecimal zero = BigDecimal.ZERO;  
BigDecimal one = BigDecimal.ONE;  
BigDecimal ten = BigDecimal.TEN;  
      比较一下BigDecimal.ZERO、new BigDecimal("0")、BigDecimal.valueOf(0)这三者,equals都是true,==的话new BigDecimal("0")就不用看了都new了,而BigDecimal.ZERO == BigDecimal.ZERO为true。

        查看源码知道:10以内的对象都是同一个。

关于加减乘除

public static double add(double value1,double value2){  
    BigDecimal b1 = new BigDecimal(Double.toString(value1));  
    BigDecimal b2 = new BigDecimal(Double.toString(value2));  
    return b1.add(b2).doubleValue();  
}  
BigDecimal的运算都没有对原值进行操作, 而是返回一个新的BigDecimal对象,这点可能有些小伙伴会搞错要注意一下。



补充:
doubleValue方法:BigDecimal转double 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值