概述
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
最后
以上就是糟糕网络为你收集整理的decimal与BigDecimal用法的全部内容,希望文章能够帮你解决decimal与BigDecimal用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复