>컴퓨터 튜토리얼 >컴퓨터 지식 >JAVA의 배정밀도 문제를 처리하는 방법

JAVA의 배정밀도 문제를 처리하는 방법

王林
王林앞으로
2024-01-16 12:24:22972검색

JAVA의 배정밀도 문제를 처리하는 방법

JAVA怎么解决더블유도问题。比如1 2 3 3 599 996这种

공개 정적 이중 추가(더블 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();

}

사용 가능한 时候调사용 这几个방법。

java는 double과 float를 사용합니다. 이것이 大多数情况下,使用double과 float计算的结果是准确的,但是在一些精島要很高的系统中,这种问题是不常严軟的。

재 《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的值작품除法运算,得到的为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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 docexcel.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제