>  기사  >  Java  >  Java의 비정상적인 이중 유형 연산 결과에 대한 솔루션

Java의 비정상적인 이중 유형 연산 결과에 대한 솔루션

高洛峰
高洛峰원래의
2017-01-23 16:08:322173검색

문제:

두 개의 double 유형 값을 연산할 때 결과 값이 비정상적인 경우가 있습니다. 예:

System.out.println(19.99+20);
  System.out.println(1.0-0.66);
  System.out.println(0.033*100);
  System.out.println(12.3/100);

출력:

39.9899999999999995
0.33999999999999997
3.300000000000003
0.12 3 00000000000001

해결책:

Java에서 간단한 부동 소수점 유형인 float 및 double은 작동할 수 없습니다. 이는 대부분의 경우 정상이기 때문입니다. 그러나 때때로 위에 표시된 문제가 발생할 수 있습니다. 이 문제는 실제로 JAVA 버그가 아닙니다. 컴퓨터 자체가 이진수이고 부동 소수점 숫자는 실제로 근사치일 뿐이므로 이진수에서 십진수 부동 소수점 숫자로 변환할 때 정확도가 쉽게 떨어지며 결과적으로 정확도가 떨어집니다.

정확성을 보장하려면 BigDecimal 클래스를 사용해야 하며 double을 BigDecimal로 직접 변환한 다음 BigDecimal로 변환해야 합니다. 즉, BigDecimal(double val) 메소드를 사용할 수 없으며 아무런 효과가 없음을 알 수 있습니다. BigDecimal(String val) 메소드를 사용합니다. 구체적인 예는 다음과 같습니다.

더블 유형의 4가지 산술 연산 예:

1. 더하기

public static double add(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.add(b2).doubleValue();
  }

2.

3. 곱셈

public static double sub(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.subtract(b2).doubleValue();
  }

4. 나눗셈

public static double mul(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.multiply(b2).doubleValue();
  }

척도 매개변수가 불완전한 경우 정밀도를 지정합니다.

위의 Java에서 비정상적인 double 유형 연산 결과에 대한 해결 방법은 모두 편집자가 공유한 내용이므로 참고가 되기를 바라며 PHP 중국어 웹사이트를 지원해 주시길 바랍니다.

Java에서 비정상적인 double 유형 연산 결과에 대한 해결 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.