1.为什么不是1.51?输出的是1.50
2.decimalformat括号里的字符串代表了什么意思?有模板吗?如果是别的格式应该怎么写
3.为什么要用#号而不是0.00?如果是#好的话,当a是0.505的时候有bug
double a =1.505;
BigDecimal bd = new BigDecimal(a);
System.out.println(new DecimalFormat("#.00").format(bd));
高洛峰2017-04-18 10:53:52
먼저 문제를 지적하세요. BigDecimal
을 구성할 때 부동 소수점 숫자(double
, float
)를 사용하지 마세요. 부동 소수점 숫자 저장에 정밀도가 부족하기 때문입니다. 컴퓨터. 예를 들어, 귀하가 작성한 코드는 다음과 같습니다.
실행 결과:
보시다시피 부동소수점수 1.505는 컴퓨터에 저장이 되지 않습니다. 구체적인 이유를 모르시면 직접 검색해보시기 바랍니다. "부동소수점수 정밀도 누락 문제"
둘째, "반올림"이라고도 하는 1.51을 출력해야 하는 경우 DecimalFormat
의 반올림 모드를 지정해야 합니다.
실행 결과:
RoundingMode
의 사용법이 이해가 안 되시면 "RoundingMode의 사용법"
셋째, 괄호 안의 문자열 의미 DecimalFormat
는 "DecimalFormat 사용"