package org.lee.study.utils;
import java.math.BigDecimal;
public class ArithmeticUtils {
private static final int DEF_DIV_SCALE = 10;
public static double add(double v1, double v2){
BigDecimal b1 = new BigDecimal(String.valueOf(v1));
BigDecimal b2 = new BigDecimal(String.valueOf(v2));
return b1.add(b2).doubleValue();
}
public static BigDecimal add(String v1, String v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2);
}
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();
}
public static double subtraction(double v1, double v2){
BigDecimal b1 = new BigDecimal(String.valueOf(v1));
BigDecimal b2 = new BigDecimal(String.valueOf(v2));
return b1.subtract(b2).doubleValue();
}
public static BigDecimal subtraction(String v1, String v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2);
}
public static String subtraction(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();
}
public static double multiplication(double v1, double v2){
BigDecimal b1 = new BigDecimal(String.valueOf(v1));
BigDecimal b2 = new BigDecimal(String.valueOf(v2));
return b1.multiply(b2).doubleValue();
}
public static BigDecimal multiplication(String v1, String v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2);
}
public static String multiplication(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();
}
private static double division(double v1, double v2){
return division(v1,v2,DEF_DIV_SCALE);
}
public static double division(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(String.valueOf(v1));
BigDecimal b2 = new BigDecimal(String.valueOf(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
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(String.valueOf(v));
return b.setScale(scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
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();
}
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();
}
public static String 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).toString();
}
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;
}
else {
res = false;
}
return res;
}
}
package org.lee.study;
import java.math.BigDecimal;
import java.text.NumberFormat;
public class BigDecimalDemo {
public static void main(String[] args) {
NumberFormat currency = NumberFormat.getCurrencyInstance();
//送参数指定国家币种 Locale.FRANCE,默认是人民币
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMaximumFractionDigits(3);
BigDecimal loanAmount = new BigDecimal("15000.48");
BigDecimal interestRate = new BigDecimal("0.008");
BigDecimal interest = loanAmount.multiply(interestRate);
System.out.println("贷款金额:t" + currency.format(loanAmount));
System.out.println("利率:t" + percent.format(interestRate));
System.out.println("利息:t" + currency.format(interest));
}
}
package org.lee.study.utils;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class NumberDealUtils {
public static String trimZero(boolean isFormat, double num) {
NumberFormat nf = NumberFormat.getInstance();
if (!isFormat) {
//设置输出格式是否使用“,”分组,默认是使用的
nf.setGroupingUsed(false);
}
return nf.format(num);
}
public static String trimZero(boolean isFormat, double num, int fractionDigit) {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(fractionDigit);
if (!isFormat) {
//设置输出格式是否使用“,”分组,默认是使用的
nf.setGroupingUsed(false);
}
return nf.format(num);
}
public static String addZeroFormat(double num, int integerDigit, int fractionDigit) {
StringBuilder rule = new StringBuilder();
if (integerDigit <= 0) {
rule.append("#");
} else {
for (int i = 0; i < integerDigit; i++) {
rule.append("0");
}
}
if (fractionDigit > 0) {
rule.append(".");
for (int i = 0; i < fractionDigit; i++) {
rule.append("0");
}
}
DecimalFormat df = new DecimalFormat(rule.toString());
return df.format(num);
}
public static String fractionDigitFormat(double num, int fractionDigit) {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(fractionDigit);
//设置输出格式是否使用“,”分组,这里不使用
nf.setGroupingUsed(false);
return nf.format(num);
}
}