工具类提供精确的浮点数运算
2018-03-13 09:23
253 查看
package com.atguigu.utils; import java.math.BigDecimal; /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */ public class Arith { //默认除法运算精度 private static final int DEF_DIV_SCALE = 10; //这个类不能实例化 private Arith(){ } /** * 提供精确的加法运算。 * @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(); } /** * 提供精确的减法运算。 * @param v1 被减数 * @param v2 减数 * @return 两个参数的差 */ 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(); } /** * 提供精确的乘法运算。 * @param v1 被乘数 * @param v2 乘数 * @return 两个参数的积 */ 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(); } /** * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 * 小数点以后10位,以后的数字四舍五入。 * @param v1 被除数 * @param v2 除数 * @return 两个参数的商 */ public static double div(double v1,double v2){ return div(v1,v2,DEF_DIV_SCALE); } /** * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 * 定精度,以后的数字四舍五入。 * @param v1 被除数 * @param v2 除数 * @param scale 表示表示需要精确到小数点以后几位。 * @return 两个参数的商 */ 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(); } /** * 对补偿结果进行精度计算 * @param v 要进行精度计算的数值 * @param type 精度计算类型,对应配置表里面的:1.取整四舍五入 2.取整舍入法 3.取整进一法 4.四舍五入保留两位有效数字 5.四舍五入保留一位有效数字 * @return */ public static double accuracyCalculate(double v,String type){ double returnValue = 0; int intType = Integer.parseInt(type); switch (intType){ case 1://1.取整四舍五入(round():进行四舍五入,0表示不留小数) returnValue = round(v,0); break; case 2://2.取整舍入法 :取整,小数不要(floor():一律舍去,仅保留整数) returnValue = Math.floor(v); break; case 3://3.取整进一法 :取整,小数进一(ceil():将小数部分一律向整数部分进位) returnValue = Math.ceil(v); break; case 4://4.(round():进行四舍五入,2表示保留两位小数) returnValue = round(v,2); break; case 5://5.(round():进行四舍五入,1表示保留一位小数) returnValue = round(v,1); break; case 6://5.(round():进行四舍五入,4表示保留四位小数) returnValue = round(v,4); break; default: break; } return returnValue; } /** * double类型绝对值。 * @param v1 元数据 * @return 绝对值 */ public static double abs(double v1){ return Math.abs(v1); } }
相关文章推荐
- 工具类---提供精确的浮点数运算
- 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
- 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入
- Java的简单类型进行精确的浮点数运算
- python中实现精确的浮点数运算详解
- 关于浮点数的比较以及提供精确的浮点数比较算法
- [00302]执行精确的浮点数运算
- 精确的浮点数运算包括加减乘除和四舍五入
- java中使用BigDecimal类来实现浮点数的精确运算
- Java的简单类型进行精确的浮点数运算
- [java]运算工具(提供精确的浮点数运算,包括加减乘除和四舍五入)
- java中BigDecimal类的精确四则运算工具类Arith
- 精确计算工具类,提供加减乘除的计算
- 精确计算工具类,提供加减乘除的计算
- java中BigDecimal类的精确四则运算工具类Arith
- JavaScript不支持精确的浮点数运算的解决方案
- <转>JAVA精确的浮点数运算
- redis缓存工具类,提供序列化接口
- Java中使用BigDecimal实现精确舍五入及工程运算
- String框架提供的一些工具类