环境
jdk:1.7
前言
之前,我曾写过一篇 java使用BigDecimal 处理商业精度及高精度详解,如何去获取有效位数;当时的我,没有弄清楚有效位和小数位数其实是互斥的!
导致在之后的工作业务中出现了问题;
今天特意记录下;
问题的主要因为是我没有弄清保留有效位和保留小数位是互斥的关系
在此之前,我想写出一个通用的方法,就是既能保留有效位,又能保留小数位;
/** * 相乘 保留是有效数字,而非有效的小数点 *@param v1 *@param v2 *@param scale *@author yutao *@return *@date 2016年11月14日下午2:52:33 */
public static BigDecimal validMuli(double v1, double v2, int scale){
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(String.valueOf(v1));
BigDecimal b2 = new BigDecimal(String.valueOf(v2));
MathContext mc = new MathContext(scale);
return b1.multiply(b2, mc);
}
/** * 除法 (保留的是有效数字,而非有效的小数点) *@param v1 *@param v2 *@param scale *@return *@author yutao *@date 2016年11月14日下午2:01:31 */
public static BigDecimal validDivi(double v1, double v2 , int scale){
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDe