java 精确计算_Java-精确计算工具类

1 importjava.math.BigDecimal;2 importjava.math.RoundingMode;3

4 /**

5 * 精确计算工具类(加,减,乘,除,返回较大值,返回较小值)6 */

7 public classCalculationUtil {8

9 /**

10 * 提供精确加法计算的add方法11 */

12 public staticString add(String value1, String value2) {13 return add(value1, value2, 0, 0);14 }15

16 /**

17 * 提供精确加法计算的add方法(默認四捨五入)18 *@paramvalue1 被加数19 *@paramvalue2 加数20 *@paramscale 精确范围(小数点后几位)21 */

22 public static String add(String value1, String value2, intscale) {23 returnadd(value1, value2, scale, BigDecimal.ROUND_HALF_UP);24 }25

26 /**

27 * 提供精确加法计算的add方法28 *@paramvalue1 被加数29 *@paramvalue2 加数30 *@paramscale 精确范围(小数点后几位)31 *@paramroundingMode 精確模式32 */

33 public static String add(String value1, String value2, int scale, intmode) {34 BigDecimal b1 = newBigDecimal(Double.valueOf(value1));35 BigDecimal b2 = newBigDecimal(Double.valueOf(value2));36 BigDecimal result =b1.add(b2);37 //mode为0,则不需要精确

38 if (mode != 0) {39 result =result.setScale(scale, mode);40 }41 returnresult.toString();42 }43

44 public static int compareTo(String value1, String value2, int scale, intmode) {45 BigDecimal b1 = newBigDecimal(Double.valueOf(value1));46 BigDecimal b2 = newBigDecimal(Double.valueOf(value2));47 BigDecimal result =b1.subtract(b2);48 //mode为0,则不需要精确

49 if (mode != 0) {50 result =result.setScale(scale, mode);51 }52 returnresult.compareTo(BigDecimal.ZERO);53 }54

55 /**

56 * 提供精确的除法运算方法divide57 *@paramvalue1 被除数58 *@paramvalue2 除数59 */

60 public static String divide(String value1, String value2) throwsIllegalAccessException {61 return divide(value1, value2, 0, null);62 }63

64 /**

65 * 提供精确的除法运算方法divide(默認四捨五入)66 *@paramvalue1 被除数67 *@paramvalue2 除数68 *@paramscale 精确范围(小数点后几位)69 */

70 public static String divide(String value1, String value2, int scale) throwsIllegalAccessException {71 returndivide(value1, value2, scale, RoundingMode.HALF_UP);72 }73

74 /**

75 * 提供精确的除法运算方法divide76 *77 *@paramvalue1 被除数78 *@paramvalue2 除数79 *@paramscale 精确范围(小数点后几位)80 *@paramroundingMode 精確模式81 */

82 public static String divide(String value1, String value2, intscale, RoundingMode roundingMode)83 throwsIllegalAccessException {84 //如果精确范围小于0,抛出异常信息

85 if (scale < 0) {86 throw new IllegalAccessException("精确度不能小于0");87 }88 BigDecimal b1 = newBigDecimal(Double.valueOf(value1));89 BigDecimal b2 = newBigDecimal(Double.valueOf(value2));90 //roundingMode为null,则不需要精确

91 if (roundingMode != null) {92 return newDouble(b1.divide(b2, scale, roundingMode).doubleValue()).toString();93 } else{94 return newDouble(b1.divide(b2).doubleValue()).toString();95 }96 }97

98 /**

99 * 比较大小 :返回较大的那个100 */

101 public staticString getMax(String value1, String value2) {102 BigDecimal b1 = newBigDecimal(Double.valueOf(value1));103 BigDecimal b2 = newBigDecimal(Double.valueOf(value2));104 return newDouble(b1.max(b2).doubleValue()).toString();105 }106

107 /**

108 * 比较大小 :返回较小的那个109 */

110 public staticString getMin(String value1, String value2) {111 BigDecimal b1 = newBigDecimal(Double.valueOf(value1));112 BigDecimal b2 = newBigDecimal(Double.valueOf(value2));113 return newDouble(b1.min(b2).doubleValue()).toString();114 }115

116

117 /**

118 *119 * 提供精确乘法运算的multiply方法120 *@paramvalue1 被乘数121 *@paramvalue2 乘数122 *@return两个参数的积123 */

124 public staticString multiply(String value1, String value2) {125 return multiply(value1, value2, 0, 0);126 }127

128 /**

129 * 提供精确乘法运算的multiply方法(默認四捨五入)130 *@paramvalue1 被乘数131 *@paramvalue2 乘数132 *@paramscale 精确范围(小数点后几位)133 */

134 public static String multiply(String value1, String value2, intscale) {135 returnmultiply(value1, value2, scale, BigDecimal.ROUND_HALF_UP);136 }137

138 /**

139 * 提供精确乘法运算的multiply方法140 *@paramvalue1 被乘数141 *@paramvalue2 乘数142 *@paramscale 精确范围(小数点后几位)143 *@paramroundingMode 精確模式144 */

145 public static String multiply(String value1, String value2, int scale, intmode) {146 BigDecimal b1 = newBigDecimal(Double.valueOf(value1));147 BigDecimal b2 = newBigDecimal(Double.valueOf(value2));148 BigDecimal result =b1.multiply(b2);149 //mode为0,则不需要精确

150 if (mode != 0) {151 result =result.setScale(scale, mode);152 }153 returnresult.toString();154 }155

156 /**

157 * 提供精确减法运算的subtract方法158 *@paramvalue1 被减数159 *@paramvalue2 减数160 *@return两个参数的差161 */

162 public staticString subtract(String value1, String value2) {163 return subtract(value1, value2, 0, 0);164 }165

166 /**

167 * 提供精确减法运算的subtract方法(默認四捨五入)168 *@paramvalue1 被减数169 *@paramvalue2 减数170 *@paramscale 精确范围(小数点后几位)171 */

172 public static String subtract(String value1, String value2, intscale) {173 returnsubtract(value1, value2, scale, BigDecimal.ROUND_HALF_UP);174 }175

176 /**

177 * 提供精确减法运算的subtract方法178 *@paramvalue1 被减数179 *@paramvalue2 减数180 *@paramscale 精确范围(小数点后几位)181 *@paramroundingMode 精確模式182 */

183 public static String subtract(String value1, String value2, int scale, intmode) {184 BigDecimal b1 = newBigDecimal(Double.valueOf(value1));185 BigDecimal b2 = newBigDecimal(Double.valueOf(value2));186 BigDecimal result =b1.subtract(b2);187 //mode为0,则不需要精确

188 if (mode != 0) {189 result =result.setScale(scale, mode);190 }191 returnresult.toString();192 }193 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值