大家在用double型计算的时候有没碰到如下问题:
double d1=1000d; double d2=1.017d;
double d3=d1*d2; d3的结果是:1016.99999999bigdecimal转换为integer
然后再把这个数据再乘以个double d4=18750d;再除以100000;
结果为:19.0687499998125 如果四舍五入保留四位小数结果为:19.0687
而真真用计算器或用系统自带的计算器算出来结果为:19.0685,这样结果相差0.0001
似乎看起来相差的不是很大,如这个结果乘以个数量可想而之会差的很大的。以下是本人专门写了个类的解决些问题,给用得着的人提供快捷的路:
import java.math.BigDecimal;
/**
* Double的加减乘除
* @author xuxinlong
* E-mail: longxx888@163 这个 E-mail 地址已经被防止灌水恶意程序保护,您需要启用
double d1=1000d; double d2=1.017d;
double d3=d1*d2; d3的结果是:1016.99999999bigdecimal转换为integer
然后再把这个数据再乘以个double d4=18750d;再除以100000;
结果为:19.0687499998125 如果四舍五入保留四位小数结果为:19.0687
而真真用计算器或用系统自带的计算器算出来结果为:19.0685,这样结果相差0.0001
似乎看起来相差的不是很大,如这个结果乘以个数量可想而之会差的很大的。以下是本人专门写了个类的解决些问题,给用得着的人提供快捷的路:
import java.math.BigDecimal;
/**
* Double的加减乘除
* @author xuxinlong
* E-mail: longxx888@163 这个 E-mail 地址已经被防止灌水恶意程序保护,您需要启用
Java Script 才能观看
*/
public class NumberOP {
private BigDecimal ins;
/**
* 测试
* @param args
*/
public static void main(String[] args){
System.out.println(new NumberOP(18750).mul(new NumberOP(1.017)).mul(new NumberOP(1000)).div(new NumberOP(1000000)).toDouble());
}
/**
*/
public class NumberOP {
private BigDecimal ins;
/**
* 测试
* @param args
*/
public static void main(String[] args){
System.out.println(new NumberOP(18750).mul(new NumberOP(1.017)).mul(new NumberOP(1000)).div(new NumberOP(1000000)).toDouble());
}
/**
* 从NumberOP构建一个NumberOP
* @param numberOP
*/
public NumberOP(NumberOP numberOP){
this.ins = numberOP.ins;
}
/**
* 从BigDecimal构建一个NumberOP
* @param bigDecimalValue
*/
public NumberOP(BigDecimal bigDecimalValue){
this.ins = bigDecimalValue;
}
* @param numberOP
*/
public NumberOP(NumberOP numberOP){
this.ins = numberOP.ins;
}
/**
* 从BigDecimal构建一个NumberOP
* @param bigDecimalValue
*/
public NumberOP(BigDecimal bigDecimalValue){
this.ins = bigDecimalValue;
}
/**
* 从String构建一个NumberOP
* @param doubleValue
*/
public NumberOP(String doubleValue){
this.ins = new BigDecimal(doubleValue);
}
/**
* 从int构建一个NumberOP
* @param intValue
*/
public NumberOP(int intValue){
this.ins = new String(intValue));
}
/**
* 从long构建一个NumberOP
* @param longValue
*/
public NumberOP(long longValue){
this.ins = new String(longValue));
}
/**
* 从float构建一个NumberOP
* @param floatValue
*/
public NumberOP(float floatValue){
/**
* 从long构建一个NumberOP
* @param longValue
*/
public NumberOP(long longValue){
this.ins = new String(longValue));
}
/**
* 从float构建一个NumberOP
* @param floatValue
*/
public NumberOP(float floatValue){
this.ins = new String(floatValue));
}
/**
* 从double构建一个NumberOP
* @param doubleValue
*/
public NumberOP(double doubleValue){
this.ins = new String(doubleValue));
}
}
/**
* 从double构建一个NumberOP
* @param doubleValue
*/
public NumberOP(double doubleValue){
this.ins = new String(doubleValue));
}
/**
* 两个数相加
* @param v1
* @param v2
* @return NumberOP
*/
public NumberOP add(NumberOP v1){
return new NumberOP(this.ins.add(v1.ins));
}
/**
* 两个数相减
* @param v1
* 两个数相加
* @param v1
* @param v2
* @return NumberOP
*/
public NumberOP add(NumberOP v1){
return new NumberOP(this.ins.add(v1.ins));
}
/**
* 两个数相减
* @param v1
* @param v2
* @return Double
*/
public NumberOP sub(NumberOP v1){
return new NumberOP(this.ins.subtract(v1.ins));
}
/**
* 两个数相乘
* @param v1
* @param v2
* @return Double
*/
public NumberOP mul(NumberOP v1){
return new NumberOP(this.ins.multiply(v1.ins));
* @return Double
*/
public NumberOP sub(NumberOP v1){
return new NumberOP(this.ins.subtract(v1.ins));
}
/**
* 两个数相乘
* @param v1
* @param v2
* @return Double
*/
public NumberOP mul(NumberOP v1){
return new NumberOP(this.ins.multiply(v1.ins));
}
/**
* 两个数相除
* @param v1
* @param v2
* @return Double
*/
public NumberOP div(NumberOP v1){
return new NumberOP(this.ins.divide(v1.ins,10,BigDecimal.ROUND_HALF_UP));
}
/**
* 返回String的结果
* @param numberOP
/**
* 两个数相除
* @param v1
* @param v2
* @return Double
*/
public NumberOP div(NumberOP v1){
return new NumberOP(this.ins.divide(v1.ins,10,BigDecimal.ROUND_HALF_UP));
}
/**
* 返回String的结果
* @param numberOP
* @return
*/
public String toString(){
return String();
}
/**
* 返回double的结果
* @param numberOP
* @return
*/
public double toDouble(){
return this.ins.doubleValue();
}
}
*/
public String toString(){
return String();
}
/**
* 返回double的结果
* @param numberOP
* @return
*/
public double toDouble(){
return this.ins.doubleValue();
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论