2009-10-22 6 views
2

내가이 질문을 신중하게 읽으므로 뒤에 오는 0을 제거하는 방법을 묻지 않습니다.정확히 정수 일 때 .0이 뒤 따르는 이유는 무엇입니까?

123d가 "123.0"이되는 이유는 무엇입니까?

IEEE 64 비트 부동 소수점은 0에서 2^52까지의 정수를 정확하게 나타낼 수 있으므로 정밀도가 손실되지는 않지만 Double.toString() 구현 중에 결정됩니다.

내 질문에 왜 그들이이 결정을 내린 것입니까? 왜 그들은 123을 인쇄하지 않았을까요?

답변

8

다른 말로 표현의 명확성을 이끌어냅니다. 사용자가 정수 값인 것처럼 보이는 것이 갑자기 간단한 산술 연산을 수행 한 후 소수점 자리가 길어질 때 혼란 스러울 때가 많습니다.

+0

int를 인쇄하면 int처럼 보입니다. 이중을 인쇄하면 이중처럼 보입니다. 세상이 이치에 맞습니다. –

+0

그럴 때 나는 두려워집니다. Numerical Methods는 왜이 경우에 정확한 이유를 가르쳐주었습니다. –

+0

일관된 "숫자"추상화가 너무 많이 필요하다고 생각합니다. – Pyrolistical

5

그런 식으로, 사실, 사실, 이중이고, int가 아닌 것을 알 수 있습니다. :)

0

toString은 매우 특별한 방법입니다. 그것은 "문자열"toString 메서드와 마찬가지로 종종 발생하지만, "사용자 표시 문자열"을 의미하지는 않습니다.

실제로 개발자가 객체를 즉시 찾을 수 있습니다 (주로 디버그 출력).

사용자가 인쇄물을 인쇄하려면 올바른 최대 크기, 소수점 수 및 십진 표시기 (. 또는)를 보장하기 위해 포맷터를 통해 렌더링해야합니다.

Java 코드에서 0.0은 자동으로 double로 변환되므로 double이 0.0으로 인쇄된다는 것을 완벽하게 이해합니다. 이는 "this is a double"을 의미합니다. 나는 그것이 "f"또는 "d"로 끝나지 않는다는 것에 조금 놀랐지 만 int의 toString이 정말 유용하고 끊임없이 "i"를 따라하기 때문에 실제로 성가 시게됩니다. 모두들.

+0

예, 형식화 된 접근 방식을 사용해야합니다. –

관련 문제