BigDecimal 곱셈 문제
1422 단어 BigDecimal곱셈통용
코드:
/**
* Created by zhangx-ae on 2016/5/17.
*/
public class DemoTest {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(1000000);
BigDecimal b = a.multiply(new BigDecimal(0.21));
System.out.println(b);
}
}
결과:
209999.9999999999922284388276239042170345783233642578125000000
제가 원하는 결과는 21000.00입니다. 결과를 어떻게 처리해야 합니까?
실제로 이는 빅데시밀이 더블을 빅데시밀로 전환할 때 발생한 문제다. 0.21이 더블값을 정확하게 표시하지 못했기 때문이다. 빅데시밀을 사용하여 더블을 정확한 값으로 전환했을 때 얻은 결과는 0.20999999999999999999228438438823904217034578323642578125이기 때문에 곱하면 그 결과가 된다.
String을 BigDecimal로 전환할 때 문자열이 얼마인지, 결과가 얼마인지에 따라 Double 형식의 데이터를 BigDecimal로 전환하려면 이렇게 하는 것이 당신이 원하는 결과일 수도 있습니다.
BigDecimal b = new BigDecimal(String.valueOf(0.21));
결과:
210000.00
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
실수의 표현방식 - 부동소수점(IEEE 754)지수부 무한 소수, 혹은 엄청 긴 소수점을 가지는 실수는 오차를 낼 수 밖에 없습니다. 아래 부동소수점으로 표현하는 방식을 보면 알 수 있습니다. 소수점의 이동 칸 수 + bios => 지수부 지수부(8bit) 가수...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.