자바 의 정수 구분

오늘 J2EE 커 뮤 니 티 에서 질문 을 받 았 습 니 다.
질문: 1/(n * (n + 1);n. 1 부터 1/(19 * 20) 까지 계속 추가 하지만 운영 과정 에서 s 는 변 하지 않 습 니 다.

public class Test {
	public static void main(String[] args) {
		double s = 0.0;
		int n = 1 ;
		do{
			s = s + 1 / (n * (n + 1));
			System.out.println(s);
			n = n + 1 ;
			System.out.println(s + "\t" + n);
		}while(n < 20);
		System.out.println(s);
	}
}

다음은 운행 결과: 0.0
0.0 2
0.0
0.0 3
0.0
0.0 4
0.0
......
분석: 정수 간 의 "/"는 정제 법 이다. 이상 의 예 에서 1/(n * (n + 1) 의 매번 결 과 는 0 에 불과 하 다.
          1/(n * (n + 1) 의 작은 수 치 를 얻 으 려 면 이렇게 쓸 수 있 습 니 다.

	public static void main(String[] args) {
		double s = 0.0;
		int n = 1 ;
		do{
                       int temp = (n * (n + 1));
			s =s +  (double)1 / temp;//         double   ,        : 1 /( double )temp ; ( double )1 /( double )temp
			System.out.println(s);
			n = n + 1 ;
			System.out.println(s + "\t" + n);
		}while(n < 20);
		System.out.println(s);
	}

비고:
(1) float 와 double 은 모두 고정된 저장 형식 을 가지 고 있 습 니 다. 이런 형식 들 은 모두 국제 기준 이 있 습 니 다. 몇 개의 소수 만 있 으 면 몇 개의 소수 가 있 는 것 이 아 닙 니 다.
(2) 인쇄 형식 은 데이터 저장 문제 가 아니 라 데이터 디 스 플레이 문제 에 속 합 니 다. 일반적인 float 나 double 저장 데 이 터 를 사용 한 다음 에 표시 할 때 2 비트 소 수 를 고정 적 으로 인쇄 할 수 있 습 니 다. 방법 은 관련 포맷 데이터 클래스 (예 를 들 어 DecimalFormat) 를 사용 하여 수 치 를 원 하 는 문자열 로 바 꾸 는 것 입 니 다.

좋은 웹페이지 즐겨찾기