java精确计算好⽤的⼯具类
java 精确计算好⽤的⼯具类
package ls;
import java.math.BigDecimal;
/**
* IT野王
* ⾃认为好⽤的计算⼯具
* 例如计算 8*23/6 结果保留3位⼩数
* Instance(8).multiply(16).divide(6).getDoubleVal(3)
*
*/
public class BigDecimalUtil{
//计算默认精度
private Integer DEFAULT_DIV_SCALE_100 = 100;
//计算结果存储
private BigDecimal bigDecimal;
//构造⽅法
private BigDecimalUtil(String val){
this.bigDecimal = new BigDecimal(val);
}
//对外构建⽅法
public static BigDecimalUtil getInstance(String val){
return new BigDecimalUtil(val);
}
//对外构建⽅法
bigdecimal除法保留小数public static BigDecimalUtil getInstance(double val){
return new String(val));
}
//设置除数精度
public BigDecimalUtil setScale(Integer scale){
if (scale <= 0) {
throw new IllegalArgumentException("设置的精度不能⼩于等于0");
}
this.DEFAULT_DIV_SCALE_100 = scale;
return this;
}
//除法默认保留⼩数点100位
public BigDecimalUtil divide(double val) {
this.bigDecimal = this.bigDecimal.divide(BigDecimal.valueOf(val), DEFAULT_DIV_SCALE_100, BigDecimal.ROUND_HALF_EVEN); return this;
}
//加法保留⼩数点100位
public BigDecimalUtil add(double val) {
this.bigDecimal = this.bigDecimal.add(BigDecimal.valueOf(val));
return this;
}
//加法保留⼩数点100位
public BigDecimalUtil add(String val) {
this.bigDecimal = this.bigDecimal.add(new BigDecimal(val));
return this;
}
//减法保留⼩数点100位
public BigDecimalUtil subtract(double val) {
this.bigDecimal = this.bigDecimal.subtract(BigDecimal.valueOf(val));
return this;
}
/
/减法保留⼩数点100位
public BigDecimalUtil subtract(String val) {
this.bigDecimal = this.bigDecimal.subtract(new BigDecimal(val));
return this;
}
//乘法保留⼩数点100位
public BigDecimalUtil multiply(double val) {
this.bigDecimal = this.bigDecimal.multiply(BigDecimal.valueOf(val));
return this;
}
//乘法保留⼩数点100位
public BigDecimalUtil multiply(String val) {
this.bigDecimal = this.bigDecimal.multiply(new BigDecimal(val));
return this;
}
//取为 String 类型的结果
public String getStringVal(){
return String();
}
//取为 String 类型的结果可以指定保留的⼩数点
public String getStringVal(int scale){
if (scale == 0) {
throw new IllegalArgumentException("除数不能为0");
}
return this.bigDecimal.divide(BigDecimal.valueOf(1), scale, BigDecimal.ROUND_HALF_EVEN).toString();
}
//取为 Double 类型的结果
public Double getDoubleVal(){
return this.bigDecimal.doubleValue();
}
//取为 Double 类型的结果可以指定保留的⼩数点
public Double getDoubleVal(int scale){
if (scale == 0) {
throw new IllegalArgumentException("除数不能为0");
}
return this.bigDecimal.divide(BigDecimal.valueOf(1), scale, BigDecimal.ROUND_HALF_EVEN).doubleValue(); }
//取为 Integer 类型的结果
public Integer getIntegerVal(){
return this.bigDecimal.intValue();
}
//取为 Float 类型的结果
public Float getFloatValue(){
return this.bigDecimal.floatValue();
}
//取为 Long 类型的结果
public Long getLongValue(){
return this.bigDecimal.longValue();
}
}
使⽤⽅式
计算:10除以3 保留5位⼩数
结果:3.33333
计算:20除以3除以7 保留10位⼩数
结果:0.952380952381
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论