찾다

 >  Q&A  >  본문

代码如下,java用BigDecimal四舍五入怎么还有问题呀?哪种方式是完全没有问题的?

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));
ringa_leeringa_lee2807일 전756

모든 응답(2)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-18 10:53:52

    먼저 문제를 지적하세요. BigDecimal을 구성할 때 부동 소수점 숫자(double, float)를 사용하지 마세요. 부동 소수점 숫자 저장에 정밀도가 부족하기 때문입니다. 컴퓨터. 예를 들어, 귀하가 작성한 코드는 다음과 같습니다.

    으아악

    실행 결과:

    보시다시피 부동소수점수 1.505는 컴퓨터에 저장이 되지 않습니다. 구체적인 이유를 모르시면 직접 검색해보시기 바랍니다. "부동소수점수 정밀도 누락 문제"


    둘째, "반올림"이라고도 하는 1.51을 출력해야 하는 경우 DecimalFormat의 반올림 모드를 지정해야 합니다.

    으아악

    실행 결과:

    RoundingMode의 사용법이 이해가 안 되시면 "RoundingMode의 사용법"

    을 검색해주세요.

    셋째, 괄호 안의 문자열 의미 DecimalFormat "DecimalFormat 사용"

    을 검색해 보세요.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:53:52

    으아아아

    회신하다
    0
  • 취소회신하다