찾다

 >  Q&A  >  본문

Java中double相减为什么会出现不精确的现象?

double s = 5.3;
double s1 = 4.2;
System.out.println(s-s1);
输出1.0999999999999996

高洛峰高洛峰2803일 전829

모든 응답(5)나는 대답할 것이다

  • 阿神

    阿神2017-04-17 17:48:37

    Java의 기본 데이터 유형 중 float 및 double 유형의 핵심은 부동 소수점 숫자입니다. 부동 소수점 숫자는 정확한 데이터를 저장할 수 없습니다. 이 경우 부동 소수점 숫자를 계산할 때 계산 결과가 정확하지 않습니다.

    그래서 자바에서는 BigDecimal이라는 클래스를 제공하는데, 정확한 데이터 연산(예: 금액)이 필요한 경우 이 클래스를 사용하면 나라를 구할 수 있습니다...

    부동 소수점 숫자의 기본 구현 및 원리와 관련하여 计算机原理과 같은 과정에서 자주 논의되며 관련 정보를 직접 찾을 수 있습니다...

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:48:37

    부동 소수점 수의 정확한 계산을 위해 Java에서 BigDecimal 사용

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:48:37

    초대해주셔서 감사합니다! 정밀도가 떨어지는 이유는 설명할 수 없지만 해결 방법은 알고 있습니다. 계산하기 전에 double 및 기타 유형을 String으로 변환한 다음 java.math.BigDecimal에 넣어 계산하는 것이 좋습니다. math.BigDecimal에는 add() 및 pide()와 같은 자체 작업 메서드가 제공됩니다. . 잠깐, BigDecimal 객체는 계산 후에 반환되고 doubleValue(), intValue() 및 기타 메서드를 사용하여 기본 데이터 유형으로 변환됩니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:48:37

    초대해주셔서 감사합니다. 해당 질문은 https://zm8.sm-tc.cn/?src=http%3A%2F%2Fz...

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:48:37

    컴퓨터 연산은 이진수이기 때문이죠.

    십진수 0.1을 이진수로 변환하는 것은 무한히 반복되는 십진수이므로 잘려야 합니다.

    십진수 통화의 덧셈과 뺄셈에는 BigDecimal 유형(일부 언어에서는 Decimal이라고도 함)을 사용하여 잘림 오류를 방지할 수 있습니다.

    MATLAB처럼 숫자 클래스를 직접 정의할 수도 있습니다.

    오류와 오류는 서로 다른 것입니다. 결국 차이점은 대부분의 경우 중요하지 않습니다.

    예: 배정밀도 부동 소수점 숫자를 사용하여 지구의 둘레를 계산합니다. 잘림 오류는 0.000001mm 정도입니다.

    회신하다
    0
  • 취소회신하다