double s = 5.3;
double s1 = 4.2;
System.out.println(s-s1);
输出1.0999999999999996
阿神2017-04-17 17:48:37
Java의 기본 데이터 유형 중 float 및 double 유형의 핵심은 부동 소수점 숫자입니다. 부동 소수점 숫자는 정확한 데이터를 저장할 수 없습니다. 이 경우 부동 소수점 숫자를 계산할 때 계산 결과가 정확하지 않습니다.
그래서 자바에서는 BigDecimal
이라는 클래스를 제공하는데, 정확한 데이터 연산(예: 금액)이 필요한 경우 이 클래스를 사용하면 나라를 구할 수 있습니다...
부동 소수점 숫자의 기본 구현 및 원리와 관련하여 计算机原理
과 같은 과정에서 자주 논의되며 관련 정보를 직접 찾을 수 있습니다...
巴扎黑2017-04-17 17:48:37
초대해주셔서 감사합니다! 정밀도가 떨어지는 이유는 설명할 수 없지만 해결 방법은 알고 있습니다. 계산하기 전에 double 및 기타 유형을 String으로 변환한 다음 java.math.BigDecimal에 넣어 계산하는 것이 좋습니다. math.BigDecimal에는 add() 및 pide()와 같은 자체 작업 메서드가 제공됩니다. . 잠깐, BigDecimal 객체는 계산 후에 반환되고 doubleValue(), intValue() 및 기타 메서드를 사용하여 기본 데이터 유형으로 변환됩니다.
伊谢尔伦2017-04-17 17:48:37
컴퓨터 연산은 이진수이기 때문이죠.
십진수 0.1을 이진수로 변환하는 것은 무한히 반복되는 십진수이므로 잘려야 합니다.
십진수 통화의 덧셈과 뺄셈에는 BigDecimal 유형(일부 언어에서는 Decimal이라고도 함)을 사용하여 잘림 오류를 방지할 수 있습니다.
MATLAB처럼 숫자 클래스를 직접 정의할 수도 있습니다.
오류와 오류는 서로 다른 것입니다. 결국 차이점은 대부분의 경우 중요하지 않습니다.
예: 배정밀도 부동 소수점 숫자를 사용하여 지구의 둘레를 계산합니다. 잘림 오류는 0.000001mm 정도입니다.