반올림 숫자가있는 Android 애플리케이션에 문제가 있습니다. Java로 계산할 때는 BigDecimal을 사용합니다. 그러나이 방법이 도움이됩니다. 그러나 우리는 SQLite에 문제가 있습니다.Android sqllite 반올림 오류
SELECT ROUND(150.075 * 100)/100 (= 150.07, not 150.08!)
임의의 먹었습니까?
반올림 숫자가있는 Android 애플리케이션에 문제가 있습니다. Java로 계산할 때는 BigDecimal을 사용합니다. 그러나이 방법이 도움이됩니다. 그러나 우리는 SQLite에 문제가 있습니다.Android sqllite 반올림 오류
SELECT ROUND(150.075 * 100)/100 (= 150.07, not 150.08!)
임의의 먹었습니까?
부동 소수점 부정확으로 인해 150.075 * 100
이 15007.5
과 같지 않기 때문입니다. 배정 밀도 부동 소수점에서 150.075
의 십진수 표현은 150.07499999999999999722444243843711
입니다.
는 소수 자릿수를 지정할 수 있습니다 ROUND()
의 2 인자 버전을 사용하는 사용자가 원하는 동작을 얻으려면 :
sqlite> SELECT ROUND(150.075, 2);
150.08
:
SELECT ROUND(150.075 + 0.00000000000009, 2) (= 150.08)
우리는 5 000 개 이상의 잘못된 값을 검사하여 효과가 있습니다.
http://www.sqlite.org/faq.html#q16 – Selvin
@Selvin 예, 알고 있습니다. 가능하면 해결 방법을 찾으십시오. – ekstro
int로 데이터를 저장 ... 150075처럼 ... 자바 코드에서 BigDecimal (150075, 3)을 사용하십시오 – Selvin