공개 정적 이중 추가(더블 d1,더블 d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.add(b2).doubleValue();
}
공용 정적 이중 서브(더블 d1,더블 d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.subtract(b2).doubleValue();
}
public static double mul(더블 d1,더블 d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.multiply(b2).doubleValue();
}
공개 정적 이중 div(더블 d1,더블 d2){
div(d1,d2,DEF_DIV_SCALE) 반환;
}
공개 정적 이중 div(더블 d1,더블 d2,int 스케일){
//규모 是小数点后要保留的位数
if(scalethrow new IllegalArgumentException("精島不能小于零");
}
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
사용 가능한 时候调사용 这几个방법。
재 《Effective Java》中提到一个原则,那就是float和double只能用来作科school计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal,过使用BigDecimal类可以解决上述问题,实例代码如下:
패키지 예;
java.math.* 가져오기;
공개 클래스 BigDecimalDemo {
public static void main(String[] args){
System.out.println(ArithUtil.add(0.01, 0.05));
System.out.println(ArithUtil.sub(1.0, 0.42));
System.out.println(ArithUtil.mul(4.015, 100));
System.out.println(ArithUtil.div(123.3, 100));
}
}
수업 ArithUtil{
개인 정적 최종 int DEF_DIV_SCALE=10;
비공개 ArithUtil(){}
//상加
공개 정적 이중 추가(더블 d1,더블 d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.add(b2).doubleValue();
}
//상减
공용 정적 이중 서브(더블 d1,더블 d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.subtract(b2).doubleValue();
}
//상乘
public static double mul(더블 d1,더블 d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.multiply(b2).doubleValue();
}
//상除
공개 정적 이중 div(더블 d1,더블 d2){
div(d1,d2,DEF_DIV_SCALE) 반환;
}
공개 정적 이중 div(더블 d1,더블 d2,int 스케일){
if(scale 새 IllegalArgumentException("크기는 양의 정수 또는 0이어야 합니다");
}
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
Java는 double과 int의 问题
假如:
int i=1;j=3;i/j==0 返回的为true
동리,i/3==0 1/3==0 1/j==0duc是返回为true
如果,double res=i/j 其返回的结果,不会是0.333...,而是0
如果你要得到为0.333...,则需要 res=((double)i)/j;
而你的
fReuslt=(int)((double)num1/num2)
ㅋㅋㅋ ,再执行(double)res,这里的res就是num1/num2,故res=1,所以double 后仍然为1,而不是1.2
위 내용은 JAVA의 배정밀도 문제를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!