我是靠谱客的博主 糟糕网络,最近开发中收集的这篇文章主要介绍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 

最后

以上就是糟糕网络为你收集整理的decimal与BigDecimal用法的全部内容,希望文章能够帮你解决decimal与BigDecimal用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部