그래서 간단한 빼기 계산을 엉망으로 만드는 Java 응용 프로그램의 버그를 좁혔습니다. 나는 왜 정확히 알 수 없다. 여기에 약간의 코드가 있습니다 :잘못된 빼기 결과 : 3.999999, 아니요 4
for (double x = (((double)bdl.length())-1)/10; x > 0; x--) {
int count;
System.out.println("x = " + x);
if (x >= 1) {
System.out.println("X = " + x + " so count = 20");
count = (20);
} else {
count = (int)(x*20);
System.out.println("X = " + x + " so count = "+count);
}
}
변수 bdl은 단지 JSONArray이며,이 점의 길이와 관련이 있습니다. bdl은 처음에 길이가 15이므로 x는 1.4가됩니다. 루프를 처음 훑어 보면 첫 번째 println은 "X = 1.4 so count = 20"이라고 말합니다. 그러나 x = 0.4 일 때 두 번째로 "X = 0.3999999999999999이므로 count = 7"이라고 표시됩니다. 그 시점에서 int로 캐스팅 (x * 20)하면 7을 얻을 수 있지만 내 질문은 왜 x가 0.4가 아닌지 이해합니다.
ObReference : [모든 컴퓨터 과학자가 부동 소수점 연산에 대해 알아야 할 사항] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –
Java를 비난하기 전에 사용할 올바른 유형. –
이것은 부동 소수점 연산 때문입니다. 귀찮아하거나 잘리는 경우 소수점 이하의 특정 숫자로 답을 말아 올릴 수 있습니다. –