float 및 double 문제:
예 1:
달러 금액을 뺄 때 잘못된 계산:
System.out.println(1.03 - 0.42); // Resultado: 0.6100000000000001
예 2:
9개 항목을 각각 10센트에 구매할 때 오류 발생:
System.out.println(1.00 - 9 * 0.10); // Resultado: 0.09999999999999998
반올림해도 오류가 계속 발생합니다.
0.10~1.00의 증분 가격으로 과자를 구매할 때와 같이 점진적인 계산에 문제가 있습니다.
예 3:
돈이 없을 때까지 과자를 사는 실수:
double funds = 1.00; for (double price = 0.10; funds >= price; price += 0.10) { funds -= price; } System.out.println(funds); // Resultado: 0.3999999999999999
해결책 1: BigDecimal 사용
BigDecimal의 예:
BigDecimal funds = new BigDecimal("1.00"); BigDecimal price = new BigDecimal("0.10"); int itemsBought = 0; while (funds.compareTo(price) >= 0) { funds = funds.subtract(price); price = price.add(new BigDecimal("0.10")); itemsBought++; } System.out.println(itemsBought + " items bought. Money left: " + funds); // Resultado: 4 items bought. Money left: 0.00
이제 계산이 정확해졌습니다.
BigDecimal의 단점:
해결책 2: int 또는 long 사용
int(센트)의 예:
int funds = 100; // 1.00 dólar = 100 centavos int price = 10; // 0.10 dólar = 10 centavos int itemsBought = 0; while (funds >= price) { funds -= price; price += 10; itemsBought++; } System.out.println(itemsBought + " items bought. Money left: " + funds); // Resultado: 4 items bought. Money left: 0
계산이 빠르고 정확합니다.
결론:
선택:
위 내용은 항목 정확한 답변이 필요한 경우 float 및 double을 피하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!