package com.xcong.excoin.modules.blackchain.service;
|
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.text.DecimalFormat;
|
|
/**
|
* 数据计算工具类
|
*
|
* @author cloud cloud
|
* @create 2017/10/11
|
**/
|
public class BigDecimalUtil {
|
|
|
/**
|
* 基本单位
|
*/
|
private static final BigDecimal UNIT = new BigDecimal(100000000);
|
|
/**
|
* 对double数据进行取精度.
|
* @param value double数据.
|
* @param scale 精度位数(保留的小数位数).
|
* @param roundingMode 精度取值方式.
|
* @return 精度计算后的数据.
|
*/
|
public static double round(double value, int scale,
|
int roundingMode) {
|
BigDecimal bd = new BigDecimal(value);
|
bd = bd.setScale(scale, roundingMode);
|
double d = bd.doubleValue();
|
bd = null;
|
return d;
|
}
|
|
/**
|
* 获取四位小数的字符串,小数位不够补充0
|
* @param value
|
* @return X.0000
|
*/
|
public static String getFourString(double value){
|
DecimalFormat df = new DecimalFormat("0.0000");
|
return df.format(value);
|
}
|
|
|
/**
|
* double 相加
|
* @param d1
|
* @param d2
|
* @return
|
*/
|
public static double sum(Double d1,Double d2){
|
BigDecimal bd1 = new BigDecimal(d1.toString());
|
BigDecimal bd2 = new BigDecimal(d2.toString());
|
return bd1.add(bd2).doubleValue();
|
}
|
|
public static double sum(String a,String b){
|
BigDecimal pa = new BigDecimal(a);
|
BigDecimal pb = new BigDecimal(b);
|
return pa.add(pb).doubleValue();
|
}
|
|
|
/**
|
* double 相减
|
* @param d1
|
* @param d2
|
* @return
|
*/
|
public static double sub(double d1,double d2){
|
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
|
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
|
return bd1.subtract(bd2).setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue();
|
}
|
|
/**
|
* double 乘法
|
* @param d1
|
* @param d2
|
* @return
|
*/
|
public static double mul(double d1,double d2){
|
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
|
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
|
return bd1.multiply(bd2).setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue();
|
}
|
|
|
/**
|
* double 除法
|
* @param d1
|
* @param d2
|
* @param scale 四舍五入 小数点位数
|
* @return
|
*/
|
public static double div(double d1,double d2,int scale){
|
// 当然在此之前,你要判断分母是否为0,
|
// 为0你可以根据实际需求做相应的处理
|
|
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
|
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
|
return bd1.divide
|
(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
|
}
|
|
/**
|
* 长整数相乘
|
* @param pa
|
* @param pb
|
* @return
|
*/
|
public static long longMul(long pa,long pb){
|
BigDecimal b1 = new BigDecimal(pa);
|
BigDecimal b2 = new BigDecimal(pb);
|
return b1.multiply(b2).longValue();
|
}
|
|
public static long longMul(long pa ,Double rate){
|
BigDecimal b1 = new BigDecimal(pa);
|
BigDecimal b2 = new BigDecimal(rate.toString());
|
b2 = b2.setScale(6,BigDecimal.ROUND_HALF_UP);
|
return b1.multiply(b2).longValue();
|
}
|
|
public static long longMul(long pa ,String rate){
|
BigDecimal b1 = new BigDecimal(pa);
|
BigDecimal b2 = new BigDecimal(rate);
|
return b1.multiply(b2).longValue();
|
}
|
|
/**
|
* 长整数相减
|
* @param pa
|
* @param pb
|
* @return
|
*/
|
public static long longSub(long pa,long pb){
|
BigDecimal b1 = new BigDecimal(pa);
|
BigDecimal b2 = new BigDecimal(pb);
|
return b1.subtract(b2).longValue();
|
}
|
|
/**
|
* 长整数相加
|
* @param pa
|
* @param pb
|
* @return
|
*/
|
public static long longAdd(long pa,long pb){
|
BigDecimal b1 = new BigDecimal(pa);
|
BigDecimal b2 = new BigDecimal(pb);
|
return b1.add(b2).longValue();
|
}
|
|
/**
|
* 入参转化
|
* @param value
|
* @return
|
*/
|
public static long inputConvert(Double value){
|
BigDecimal input = new BigDecimal(value.toString());
|
return input.multiply(UNIT).longValue();
|
}
|
|
/**
|
* 输出转化
|
* @param value
|
* @return
|
*/
|
public static double outputConvert(long value){
|
BigDecimal output = new BigDecimal(value);
|
return output.divide(UNIT,6, RoundingMode.DOWN).doubleValue();
|
}
|
|
public static void main(String[] args) {
|
long res = longMul(100000000,0.000009999999);
|
System.out.println(res);
|
|
}
|
|
public static long sum(Long d1,String d2){
|
BigDecimal bd1 = new BigDecimal(d1.toString());
|
BigDecimal bd2 = new BigDecimal(d2);
|
return bd1.add(bd2).longValue();
|
}
|
}
|