package com.sicilon.provider.config;
import java.math.BigDecimal;
import java.text.NumberFormat;
public class DoubleUtils {
private static final int DEF_DIV_SCALE = 10;
public static Double add(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.add(b2).doubleValue());
}
public static Double sub(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.subtract(b2).doubleValue());
}
public static Double mul(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.multiply(b2).doubleValue());
}
public static Double div(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP)
.doubleValue());
}
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(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue());
}
public static String doubleToStr(Double d) {
if (d == null) {
return "";
}
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);
return (nf.format(d));
}
public static String doubleToStr(String d) {
if (d == null) {
return "";
}
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);
return (nf.format(d));
}
}
public class DoubleCompare {
private static final int DEF_DIV_SCALE = 10;
final static public boolean isEqual(double d1, double d2, int digit) {
return Arith.compare(formatDoubleValue(d1, digit), formatDoubleValue(d2, digit)) == 0;
}
final static public boolean doubleEqual(double d1, double d2, double e) {
return Math.abs(d1-d2) < e;
}
final static public boolean less(double d1, double d2, int digit) {
return formatDoubleValue(d1, digit) < formatDoubleValue(d2, digit);
}
final static public boolean large(double d1, double d2, int digit) {
return formatDoubleValue(d1, digit) > formatDoubleValue(d2, digit);
}
final static public boolean lessEqual(double d1, double d2, int digit) {
return formatDoubleValue(d1, digit) <= formatDoubleValue(d2, digit);
}
static public double formatDoubleValue(double d, int digit) {
BigDecimal b = BigDecimal.valueOf(d);
b = b.setScale(digit, BigDecimal.ROUND_HALF_UP);
return b.doubleValue();
}
static public BigDecimal formatDoubleValueToBigDecimal(double d, int digit) {
BigDecimal b = BigDecimal.valueOf(d);
b = b.setScale(digit, BigDecimal.ROUND_HALF_UP);
return b;
}
static public double getCalculateSum(double d1,double d2,int type){
BigDecimal oldSumBig = new BigDecimal(Double.toString(d1));
BigDecimal newSumBig = new BigDecimal(Double.toString(d2));
if(type==1){
newSumBig = newSumBig.add(oldSumBig);
} else if(type==2){
newSumBig = newSumBig.subtract(oldSumBig);
} else if(type==3){
newSumBig = newSumBig.multiply(oldSumBig);
}
return newSumBig.doubleValue();
}
static public double getCalculateObjSum(Double d1,Double d2,int type){
double d1Tmp=0.0;
if(d1 != null) {
d1Tmp = d1.doubleValue();
}else{
d1Tmp = 0.0 ;
}
double d2Tmp=0.0;
if(d2 != null) {
d2Tmp = d2.doubleValue();
}else{
d2Tmp = 0.0 ;
}
BigDecimal oldSumBig = new BigDecimal(Double.toString(d1Tmp));
BigDecimal newSumBig = new BigDecimal(Double.toString(d2Tmp));
if(type==1){
newSumBig = newSumBig.add(oldSumBig);
} else if(type==2){
newSumBig = newSumBig.subtract(oldSumBig);
} else if(type==3){
newSumBig = newSumBig.multiply(oldSumBig);
}
return newSumBig.doubleValue();
}
public static final Double getValueFromSap(String doubleStr) {
if (StringUtils.isBlank(doubleStr)) {
return 0.0d;
}
if (doubleStr.endsWith("-")) {
String replaceDoubleStr = doubleStr.replace("-", "");
return - Double.parseDouble(replaceDoubleStr);
}else {
return Double.parseDouble(doubleStr);
}
}
final static public Double add(Double v1,Double v2){
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return b1.add(b2).doubleValue();
}
final static public Double sub(Double v1,Double v2){
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return b1.subtract(b2).doubleValue();
}
public static Double div(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue());
}
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(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue());
}
public static String doubleToStr(Double d) {
if (d == null) {
return "";
}
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);
return (nf.format(d));
}
public static String doubleToStr(String d) {
if (d == null) {
return "";
}
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);
return (nf.format(d));
}
}