double浮点类型计算工具类
2016-02-23 00:00
375 查看
摘要: double浮点类型工具
package com.minxinloan.utils; import java.math.BigDecimal; public class DoubleUtil { /* * 默认小数位 * */ private static final int DEF_DIV_SCALE = 2; /*****************加法计算*************************** * 多个double参数相加 * 默认保留两位小数 * @param values传递的参数值,依次相加 * 例如:a,b,c 计算方式为 a+b+c * @return 计算结果 返回小数位为2 * @author */ public static double add(Double ...values){ return add(DEF_DIV_SCALE,values); } /** * 多个double参数相加 * @param scale 保留的小数位数 * @param values 传递的参数值,依次相加 * @return 计算结果 返回小数位为输入值 * @author */ public static double add(int scale,Double ...values){ BigDecimal temp = null ; double result = 0 ; for(Double d : values){ if(d == null ){ d = 0.00 ; } if(temp == null ){ temp = new BigDecimal(Double.toString(d)); result = temp.doubleValue(); }else{ temp = new BigDecimal(Double.toString(result)); BigDecimal b2 = new BigDecimal(Double.toString(d)); result = temp.add(b2).doubleValue(); } } if(temp != null ){ return round(result,scale); } return 0.00; } /** * 多个double参数相加 * 默认保留两位小数 * @param values传递的参数值,依次相加 * 例如:a,b,c 计算方式为 a+b+c * @return 计算结果 返回小数位为2 * @author */ public static double add(String ...values){ return add(DEF_DIV_SCALE,values); } /** * 多个double参数相加 * @param scale 保留的小数位数 * @param values 传递的参数值,依次相加 * @return 计算结果 返回小数位为输入值 * @author */ public static double add(int scale,String ...values){ BigDecimal temp = null ; double result = 0 ; for(String d : values){ if(d == null){ d ="0.00"; } if(temp == null ){ temp = new BigDecimal(d); result = temp.doubleValue(); }else{ temp = new BigDecimal(Double.toString(result)); BigDecimal b2 = new BigDecimal(d); result = temp.add(b2).doubleValue(); } } if(temp != null ){ return round(result,scale); } return 0.00; } /*****************减法计算*************************** * 多个数的减法运算 * @param values 按照传入的参数顺序,依次相减 * 例如:a,b,c 计算方式为 a-b-c * @return 计算结果,返回小数位为2 * @author */ public static double sub(Double ...values) { return sub(DEF_DIV_SCALE, values); } /** * 多个数的减法运算 * @param scale 保留的小数位数 * @param values 按照传入的参数顺序,依次相减 * 例如:a,b,c 计算方式为 a-b-c * @return 计算结果 返回小数位为输入值 * @author */ public static double sub(int scale,Double ...values) { BigDecimal temp = null ; double result = 0 ; for(Double d : values){ if(d == null ){ d = 0.00 ; } if(temp == null ){ temp = new BigDecimal(Double.toString(d)); result = temp.doubleValue(); }else{ temp = new BigDecimal(Double.toString(result)); BigDecimal b2 = new BigDecimal(Double.toString(d)); result = temp.subtract(b2).doubleValue(); } } if(temp != null ){ return round(result,scale); } return 0.00; } /** * 多个数的减法运算 * @param values 按照传入的参数顺序,依次相减 * 例如:a,b,c 计算方式为 a-b-c * @return 计算结果,返回小数位为2 * @author */ public static double sub(String ...values) { return sub(DEF_DIV_SCALE, values); } /** * 多个数的减法运算 * @param scale 保留的小数位数 * @param values 按照传入的参数顺序,依次相减 * 例如:a,b,c 计算方式为 a-b-c * @return 计算结果 返回小数位为输入值 * @author */ public static double sub(int scale,String ...values) { BigDecimal temp = null ; double result = 0 ; for(String d : values){ if(d == null){ d="0.00"; } if(temp == null ){ temp = new BigDecimal(d); result = temp.doubleValue(); }else{ temp = new BigDecimal(Double.toString(result)); BigDecimal b2 = new BigDecimal(d); result = temp.subtract(b2).doubleValue(); } } if(temp != null ){ return round(result,scale); } return 0.00; } /*****************乘法计算*************************** * 多个数的乘法法运算 * @param values 按照传入的参数顺序,依次相乘 * 例如:a,b,c 计算方式为 a*b*c * @return 计算结果,返回小数位为2 * @author */ public static double mul(Double ...values) { return mul(DEF_DIV_SCALE,values); } /** * 多个数的乘法运算 * @param scale 保留的小数位数 * @param values 按照传入的参数顺序,依次相乘 * 例如:a,b,c 计算方式为 a*b*c * @return 计算结果 返回小数位为输入值 * @author */ public static double mul(int scale,Double ...values) { BigDecimal temp = null ; double result = 0 ; for(Double d : values){ if(d == null ){ d = 0.00 ; } if(temp == null ){ temp = new BigDecimal(Double.toString(d)); result = temp.doubleValue(); }else{ temp = new BigDecimal(Double.toString(result)); BigDecimal b2 = new BigDecimal(Double.toString(d)); result = temp.multiply(b2).doubleValue(); } } if(temp != null ){ return round(result,scale); } return 0.00; } /** * 多个数的乘法法运算 * @param values 按照传入的参数顺序,依次相乘 * 例如:a,b,c 计算方式为 a*b*c * @return 计算结果,返回小数位为2 * @author */ public static double mul(String ...values) { return mul(DEF_DIV_SCALE,values); } /** * 多个数的乘法运算 * @param scale 保留的小数位数 * @param values 按照传入的参数顺序,依次相乘 * 例如:a,b,c 计算方式为 a*b*c * @return 计算结果 返回小数位为输入值 * @author */ public static double mul(int scale,String ...values) { BigDecimal temp = null ; double result = 0 ; for(String d : values){ if(d == null){ d = "0.00" ; } if(temp == null ){ temp = new BigDecimal(d); result = temp.doubleValue(); }else{ temp = new BigDecimal(result); BigDecimal b2 = new BigDecimal(d); result = temp.multiply(b2).doubleValue(); } } if(temp != null ){ return round(result,scale); } return 0.00; } /*********************除法计算*************************** * 多个数的除法运算 * @param scale 保留的小数位数 * @param values 按照传入的参数顺序,依次相除 * 例如:a,b,c 计算方式为 a/b/c * @return 计算结果 返回小数位为2 * @author */ public static double div(Double ...values) { return div(DEF_DIV_SCALE,values); } /** * 多个数的除法运算 * @param scale 保留的小数位数 * @param values 按照传入的参数顺序,依次相除 * 例如:a,b,c 计算方式为 a/b/c * @return 计算结果 返回小数位为输入值 * @author */ public static double div(int scale,Double ...values) { BigDecimal temp = null ; double result = 0 ; for(Double d : values){ if(d == null ){ d = 0.00 ; } if(temp == null ){ temp = new BigDecimal(Double.toString(d)); result = temp.doubleValue(); }else{ temp = new BigDecimal(Double.toString(result)); BigDecimal b2 = new BigDecimal(Double.toString(d)); result = temp.divide(b2).doubleValue(); } } if(temp != null ){ return round(result,scale); } return 0.00; } /** * 多个数的除法运算 * @param scale 保留的小数位数 * @param values 按照传入的参数顺序,依次相除 * 例如:a,b,c 计算方式为 a/b/c * @return 计算结果 返回小数位为2 * @author */ public static double div(String ...values) { return div(DEF_DIV_SCALE,values); } /** * 多个数的除法运算 * @param scale 保留的小数位数 * @param values 按照传入的参数顺序,依次相除 * 例如:a,b,c 计算方式为 a/b/c * @return 计算结果 返回小数位为输入值 * @author */ public static double div(int scale,String ...values) { BigDecimal temp = null ; double result = 0 ; for(String d : values){ if(d == null){ d = "0.00"; } if(temp == null ){ temp = new BigDecimal(d); result = temp.doubleValue(); }else{ temp = new BigDecimal(Double.toString(result)); BigDecimal b2 = new BigDecimal(d); result = temp.divide(b2).doubleValue(); } } if(temp != null ){ return round(result,scale); } return 0.00; } /********************四色五入********************************** * 提供精确的小数位四舍五入处理。 * @param value 需要四舍五入的数字 * @return 四舍五入后的结果,默认两位 * @author */ public static double round(double value) { return round(value,DEF_DIV_SCALE); } /** * 提供精确的小数位四舍五入处理。 * @param value 需要四舍五入的数字 * @param scale小数点后保留几位 * @return 四舍五入后的结果 * @author */ public static double round(double value, int scale) { if (scale < 0) { throw new IllegalArgumentException( "输入小数位错误,输入的小数位为:"+scale); } BigDecimal b = new BigDecimal(Double.toString(value)); BigDecimal init = new BigDecimal("1"); return b.divide(init, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } public static double string2Double(String value,int scale){ if(value == null){ value = "0.00" ; } BigDecimal b = new BigDecimal(value); return round(b.doubleValue(), scale); } public static double string2Double(String value){ if(value == null || "".equals(value)){ value="0"; } BigDecimal b = new BigDecimal(value); return round(b.doubleValue(), DEF_DIV_SCALE); } public static double null2Double(Double d){ if(d == null ){ return 0.00d; } return d ; } }
相关文章推荐
- 关于PHP浮点数你应该知道的(All 'bogus' about the float in PHP)
- Found: decimal, expected: double precision
- (DBA之路【三】)mysql支持的基本数据类型
- css导航栏
- 2. 变量
- float与double类型的内存分布,精度和范围
- 操作系统实验之作业调度算法
- tgmath.h
- C++ 模板中定义友元
- double运算精度问题
- Mysql面试题精选
- Double Cardan Shaft
- 实验楼学习笔记-float和double区别
- 使用精确小数时注意项
- 浮点精度问题
- Java的double的精度问题以及解决方案
- 如何将double型数值转换为16进制的形式
- 数据库中插入Double型结果实际值为整型
- 记录:json lib 2.4改变了double类型的精度
- java中double四舍五入并设置小数点位数的问题