标签:
* java当中默认声明的小数是double类型的;
* double d=4.0
* 如果声明:
float x=4.0;
* float x = 4.0则会报错,需要如下写法:
float x = 4.0f;//其中4.0f后面的f只是为了区别double,并不代表任何数字上的意义 float x1 =(float)4.0;
folat 与 double 区别:
* float 内存分配4个字节,占32位,有效小数位6-7位
* double 型 内存分配8个字节,有效小数位15位
* 在《Effective Java》这本书中也提到这个原则: float和double只能用来做科学计算或者是工程计算; 在商业计算中我们要用java.math.BigDecimal。
使用java.math.BigDecimal类进行计算:
/** * 提供精确的数学运算。 * @param v1 被(加数,减数,除数、、) * @param v2 加数 ,减数、、、 * @return 两个参数的(和,除,乘积,差) */ //加法 public static double add(double v1,double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); } //减法 public static double sub(double v1,double v2){ BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.subtract(b2).doubleValue(); } //乘法 public static double mul(double v1,double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.multiply(b2).doubleValue(); } /* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 * 定精度,以后的数字四舍五入。 * @param scale 表示表示需要精确到小数点以后几位。 */ public static double div(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(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); }
提供精确的小数位四舍五入处理:
/** * 提供精确的小数位四舍五入处理。 * @param v 需要四舍五入的数字 * @param scale 小数点后保留几位 * @return 四舍五入后的结果 */ public static double round(double v,int scale) { if(scale<0){ throw new IllegalArgumentException("The scale must be a positive integer or zero"); } BigDecimal b = new BigDecimal(Double.toString(v)); BigDecimal one = new BigDecimal("1"); return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); }
标签:
原文地址:http://www.cnblogs.com/wss2881938/p/4644565.html