어제 저는 DecimalFormat 메서드 .format()의 모든 자리 표시 자 및 해당 함수의 동작을 직접 탐색하려고했습니다.
그래서 두 개의 숫자를 써서 서로 다른 패턴을 시도했습니다. "#. ##"을 사용하면 의미없는 모든 0이 잘리고 "0000.00"을 사용하여 번호 앞에 0을 추가했습니다. 그것은 괜찮 았지만, 그런 다음 어떤 일이 일어날지를보기 위해 이상한 패턴을 시도했습니다.
"33333. ##"패턴을 사용하면 최종 출력이 실제로 이상합니다. 당신은 아래에있는 내 코드를 볼 수 있습니다 :DecimalFormat 메서드 .format()을 사용하면 패턴 "33333. ##"이 왜 이상하게 작동합니까?
33222,4732
33102
: 번호 등 만 사용 패턴
33332222,47
-2,0
같은 입력이. "33033 ##"결과를 주었다
DecimalFormat df = new DecimalFormat("33332.##");
double a= 222.46705219;
double b=-102.000;
System.out.println(df.format(a));
System.out.println(df.format(b));
그리고이었다 출력 나는 프로그램이 0 대신에 포맷 된 숫자를 추가했음을 이해하지만 왜 0이 자리 표시 자로 제시되지 않을지라도이 방법은 여전히 첫 번째 숫자와 (분명히) 두 번째 숫자를 반올림합니까?
왜 첫 번째 숫자는 두 번째 숫자로 반올림되었지만 두 번째 숫자 (b)는 끝에 0이 인쇄 되었습니까?
그리고 0- 자리 표시자가 "33033. ##"의 중간에 표시 될 때 프로그램은 그 자리에 형식 번호 a를 삽입하지만 번호 b의 끝에 "33"을 인쇄하지 않습니다.
이 동작을 설명하는 방법을 모르겠습니다.
그래, 나는 그것이 유효하지 않다는 것을 알고있다. 그러나 그것은 모든 패턴이 숫자 a를 숫자 b와 다른 방식으로 취급하는 이유를 설명하지 못한다. 예제를보십시오 - 패턴 "33332. ##"은 소수점 구분 기호 뒤에 두 번째 숫자로 포맷 된 "a"를 인쇄하지만 "b"는 첫 번째 숫자로 포맷됩니까? –
내가 말하고자하는 것은 그것이 유효하지 않기 때문에 결과가 예측할 수 없다는 것입니다. 여러 가지 이유가있을 수 있으며, 경고없이 변경되지 않는다고 믿을만한 이유가 없습니다. –