在项目中你们设计金钱用的是什么类型呢?是double还是float类型呢!其实这两个都不行,给你们举个例子:
System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);
这是一个很简单的加减乘除,我们口算都能算出来的数可他出现的结果居然是
当然并不是每数字都是这样,这只是一个例子,为什么会造成这种现象呢,是因为我们使用的基本数据类型double精度不高,这样的精度我们是不可能用来做金钱类型的所以我们用了另一种类型BigDecimal类型。
学过java基础的都知道,他并不是基本数据类型,他是Java提供的大数字的操作类,用于高精度计算,都说他是个类,那么我们就按照类的方式用它。
1. 创建对象
double a =1.0;
String str= "1.0";
BigDecimal b1 = new BigDecimal(str);
BigDecimal b2 = new BigDecimal(a);
BigDecimal b3=BigDecimal.valueOf(a);
由上述可知创建他有3种方法,通过构造函数的方法,还有静态方法的方式创建,其中通过double类型的构造函数创建是不推荐的,因为精度很差。
2. 加减乘除的使用方法。
这bigDecimal类型是不支持直接±*%的方式进行加减乘除进行运算的。他是直接使用英文的加减乘除,即add, substract, multiply和divide
例如:
3.大小的比较
两个BigDecimal值比较使用compareTo方法, 比较结果有-1, 0, 1, 分别表示小于, 等于, 大于;
例如:
4.设计数据库的一些坑
在设计数据库时,选择decimal类型长度是可以自定义的,另外要注意设置默认值,设置为0.00不要用默认的null,不然在运算中会带来一些不必要的麻烦
`balance` decimal(18,2) DEFAULT '0.00' COMMENT '账户余额'