JAVA高精度计算工具
生活随笔
收集整理的這篇文章主要介紹了
JAVA高精度计算工具
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
package com.per.test;import java.math.BigDecimal;/*** 用于高精確處理常用的數(shù)學(xué)運算*/
public class ArithmeticUtils {//默認(rèn)除法運算精度private static final int DEF_DIV_SCALE = 10;/*** 提供精確的加法運算** @param v1 被加數(shù)* @param v2 加數(shù)* @return 兩個參數(shù)的和*/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 被加數(shù)* @param v2 加數(shù)* @return 兩個參數(shù)的和*/public static BigDecimal add(String v1, String v2) {BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.add(b2);}/*** 提供精確的加法運算** @param v1 被加數(shù)* @param v2 加數(shù)* @param scale 保留scale 位小數(shù)* @return 兩個參數(shù)的和*/public static String add(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.add(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 提供精確的減法運算** @param v1 被減數(shù)* @param v2 減數(shù)* @return 兩個參數(shù)的差*/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 被減數(shù)* @param v2 減數(shù)* @return 兩個參數(shù)的差*/public static BigDecimal sub(String v1, String v2) {BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.subtract(b2);}/*** 提供精確的減法運算** @param v1 被減數(shù)* @param v2 減數(shù)* @param scale 保留scale 位小數(shù)* @return 兩個參數(shù)的差*/public static String sub(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.subtract(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 提供精確的乘法運算** @param v1 被乘數(shù)* @param v2 乘數(shù)* @return 兩個參數(shù)的積*/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();}/*** 提供精確的乘法運算** @param v1 被乘數(shù)* @param v2 乘數(shù)* @return 兩個參數(shù)的積*/public static BigDecimal mul(String v1, String v2) {BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.multiply(b2);}/*** 提供精確的乘法運算** @param v1 被乘數(shù)* @param v2 乘數(shù)* @param scale 保留scale 位小數(shù)* @return 兩個參數(shù)的積*/public static double mul(double v1, double v2, int scale) {BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return round(b1.multiply(b2).doubleValue(), scale);}/*** 提供精確的乘法運算** @param v1 被乘數(shù)* @param v2 乘數(shù)* @param scale 保留scale 位小數(shù)* @return 兩個參數(shù)的積*/public static String mul(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 提供(相對)精確的除法運算,當(dāng)發(fā)生除不盡的情況時,精確到* 小數(shù)點以后10位,以后的數(shù)字四舍五入** @param v1 被除數(shù)* @param v2 除數(shù)* @return 兩個參數(shù)的商*/public static double div(double v1, double v2) {return div(v1, v2, DEF_DIV_SCALE);}/*** 提供(相對)精確的除法運算。當(dāng)發(fā)生除不盡的情況時,由scale參數(shù)指* 定精度,以后的數(shù)字四舍五入** @param v1 被除數(shù)* @param v2 除數(shù)* @param scale 表示表示需要精確到小數(shù)點以后幾位。* @return 兩個參數(shù)的商*/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();}/*** 提供(相對)精確的除法運算。當(dāng)發(fā)生除不盡的情況時,由scale參數(shù)指* 定精度,以后的數(shù)字四舍五入** @param v1 被除數(shù)* @param v2 除數(shù)* @param scale 表示需要精確到小數(shù)點以后幾位* @return 兩個參數(shù)的商*/public static String div(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v1);return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 提供精確的小數(shù)位四舍五入處理** @param v 需要四舍五入的數(shù)字* @param scale 小數(shù)點后保留幾位* @return 四舍五入后的結(jié)果*/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));return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();}/*** 提供精確的小數(shù)位四舍五入處理** @param v 需要四舍五入的數(shù)字* @param scale 小數(shù)點后保留幾位* @return 四舍五入后的結(jié)果*/public static String round(String v, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b = new BigDecimal(v);return b.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 取余數(shù)** @param v1 被除數(shù)* @param v2 除數(shù)* @param scale 小數(shù)點后保留幾位* @return 余數(shù)*/public static String remainder(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.remainder(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 取余數(shù) BigDecimal** @param v1 被除數(shù)* @param v2 除數(shù)* @param scale 小數(shù)點后保留幾位* @return 余數(shù)*/public static BigDecimal remainder(BigDecimal v1, BigDecimal v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}return v1.remainder(v2).setScale(scale, BigDecimal.ROUND_HALF_UP);}/*** 比較大小** @param v1 被比較數(shù)* @param v2 比較數(shù)* @return 如果v1 大于v2 則 返回true 否則false*/public static boolean compare(String v1, String v2) {BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);int bj = b1.compareTo(b2);boolean res;if (bj > 0)res = true;elseres = false;return res;}/*** 減法* @param d1* @param d2* @return*/public static BigDecimal subtraction(BigDecimal d1,BigDecimal d2){return d1.subtract(d2);}/*** 絕對值* @param d1* @return*/public static int absoluteValue(int d1){return d1>0?d1:-d1;}}
?
轉(zhuǎn)載于:https://www.cnblogs.com/codigup/p/10167289.html
總結(jié)
以上是生活随笔為你收集整理的JAVA高精度计算工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第五章实践上机报告
- 下一篇: 【AtCoder】ARC088