java工具类-BigDecimal
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java工具类-BigDecimal相关的知识,希望对你有一定的参考价值。
1 package hello; 2 3 import java.math.BigDecimal; 4 5 /** 6 * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。 7 */ 8 public class BigDecimalUtil { 9 10 // 默认除法运算精度 11 private static final int DEF_DIV_SCALE = 10; 12 13 // 这个类不能实例化 14 private BigDecimalUtil() { 15 } 16 17 /** 18 * 提供精确的加法运算。 19 * 20 * @param v1 21 * 被加数 22 * @param v2 23 * 加数 24 * @return 两个参数的和 25 */ 26 public static double add(double v1, double v2) { 27 BigDecimal b1 = new BigDecimal(Double.toString(v1)); 28 BigDecimal b2 = new BigDecimal(Double.toString(v2)); 29 return b1.add(b2).doubleValue(); 30 } 31 32 /** 33 * 提供精确的减法运算。 34 * 35 * @param v1 36 * 被减数 37 * @param v2 38 * 减数 39 * @return 两个参数的差 40 */ 41 public static double sub(double v1, double v2) { 42 BigDecimal b1 = new BigDecimal(Double.toString(v1)); 43 BigDecimal b2 = new BigDecimal(Double.toString(v2)); 44 return b1.subtract(b2).doubleValue(); 45 } 46 47 /** 48 * 提供精确的乘法运算。 49 * 50 * @param v1 51 * 被乘数 52 * @param v2 53 * 乘数 54 * @return 两个参数的积 55 */ 56 public static double mul(double v1, double v2) { 57 BigDecimal b1 = new BigDecimal(Double.toString(v1)); 58 BigDecimal b2 = new BigDecimal(Double.toString(v2)); 59 return b1.multiply(b2).doubleValue(); 60 } 61 62 /** 63 * 提供精确的乘法运算。 64 * 65 * @param v1 66 * 被乘数 67 * @param v2 68 * 乘数 69 * @param scale 70 * 乘数 71 * @return 两个参数的积 72 */ 73 public static double mul(double v1, double v2, int scale) { 74 BigDecimal b1 = new BigDecimal(Double.toString(v1)); 75 BigDecimal b2 = new BigDecimal(Double.toString(v2)); 76 BigDecimal r = b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP); 77 return r.doubleValue(); 78 } 79 80 /** 81 * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。 82 * 83 * @param v1 84 * 被除数 85 * @param v2 86 * 除数 87 * @return 两个参数的商 88 */ 89 public static double div(double v1, double v2) { 90 return div(v1, v2, DEF_DIV_SCALE); 91 } 92 93 /** 94 * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。 95 * 96 * @param v1 97 * 被除数 98 * @param v2 99 * 除数 100 * @param scale 101 * 表示表示需要精确到小数点以后几位。 102 * @return 两个参数的商 103 */ 104 public static double div(double v1, double v2, int scale) { 105 if (scale < 0) { 106 throw new IllegalArgumentException("The scale must be a positive integer or zero"); 107 } 108 BigDecimal b1 = new BigDecimal(Double.toString(v1)); 109 BigDecimal b2 = new BigDecimal(Double.toString(v2)); 110 return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); 111 } 112 113 /** 114 * 提供精确的小数位四舍五入处理。 115 * 116 * @param v 117 * 需要四舍五入的数字 118 * @param scale 119 * 小数点后保留几位 120 * @return 四舍五入后的结果 121 */ 122 public static double round(double v, int scale) { 123 if (scale < 0) { 124 throw new IllegalArgumentException("The scale must be a positive integer or zero"); 125 } 126 BigDecimal b = new BigDecimal(Double.toString(v)); 127 BigDecimal one = new BigDecimal("1"); 128 return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); 129 } 130 };
以上是关于java工具类-BigDecimal的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch代码片段,及工具类SearchEsUtil.java