BigDecimal使用之坑

Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算.

其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类.
BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDecimal 加入了小数的概念.
float和Double只能用来做科学计算或者是工程计算;在商业计算中,对数字精度要求较高,必须使用 BigInteger 类和 BigDecimal 类,它支持任何精度的定点数,可以用它来精确计算货币值.
BigDecimal类创建的是对象,不能使用传统的+、-、*、/等算术运算符直接对其进行数学运算,而必须调用其对应的方法.方法的参数也必须是BigDecimal类型的对象.
构造 BigDecimal 对象常用以下方法:
BigDecimal BigDecimal(double d); //不允许使用
BigDecimal BigDecimal(String s); //常用,推荐使用
static BigDecimal valueOf(double d); //常用,推荐使用
1. double 参数的构造方法,不允许使用!!!!因为它不能精确的得到相应的值;
2. String 构造方法是完全可预知的: 写入 new BigDecimal("0.1") 将创建一个 BigDecimal,它正好等于预期的0.1; 因此,通常建议优先使用 String 构造方法;
3. 静态方法 valueOf(double val) 内部实现,仍是将 double 类型转为 String 类型; 这通常是将 double(或float)转化为 BigDecimal 的首选方法; 在java中提供了大数字的操作类,即java.math.BinInteger类和java.math. BigDecimal 类。这两个类用于高精度计 算,其中BigInteger类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类。下边我们介绍 BigDecimal 类: BigDecimal 的实现利用到了BigInteger,不同的是 BigDecimal 加入了小数的概念。一般的float型和Double型数据只可 以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到j @AllArgs Constructor public class ImgDTO implements Serializable { private static final long serialVersionUID = 1L; private String url; 构造ImgDTO对象: new ImgDTO(url: 'img1') 完整报错信息:groovy.lang.GroovyRuntimeException: failed to invok 在对mongodb做insert或者update操作时出现的错,原因是插入的数据里面有 BigDecimal 类型. 造成 BigDecimal 的原因可能是fastjson转换造成的,fastjson转换时默认会把float和double类型转换成 BigDecimal 类型,若不想要类型改变,则需要做设置 1.scala val disableDecimalFeature = JSON.DEFAULT_PARSER_FEATURE & ~Feature.Use BigDecimal .getMask. 我们在进行项目搭建时,经常会遇到这种错误:The type java.lang.Object cannot be resolve d. It is indirectly referenced from required .class files   其实这是由于JDK版本与ME版本不兼容造成的,通常降低JDK版本即可。我原先用的1.8,后来改成1.6就好使了。 更改JDK版本不走如下:     写单元测试时需要自己造一个ServerException,这个ServerException是自定义的,有一系列构造方法,一开始相安无事,直到我调用了其中一个构造方法时,出现了错误,提示can't find constructor 找不到构造器,而且这个错误在运行时才报出,IDE并没有自动检查出错误,我明明是按照构造器中的参数传入的呀!    经过和其他构造方法对比,这个出现错误的构造方法特...