본문 바로가기

개발일지/Java + Spring

[java] float, double 계산 후 소수점까지 출력

<잘못된 예제>

import java.util.Scanner;

public class SungJuk {

	public static void main(String[] args) {
		int sum = 0;
		float avg = 0f;
		Scanner sc = new Scanner(System.in);
		
		System.out.print("국어 성적을 입력하세요 : ");
		int kor = sc.nextInt();
		System.out.print("수학 성적을 입력하세요 : ");
		int mat = sc.nextInt();
		
		sum = kor + mat;
		avg = sum/2;
		
		System.out.println("합 계 : " + sum + "점 입니다.");
		System.out.println("평 균 : " + avg + "점 입니다.");

	}

}

이렇게 출력을 하면 출력 할 때에는 소수점 뒷자리가 싹 날아가고 계속 n.0으로만 출력이 된다. 변수 선언 할 때 float 값에 0f도 해줬는데 왜!


import java.util.Scanner;

public class SungJuk {

	public static void main(String[] args) {
		int sum = 0;
		float avg = 0f;
		Scanner sc = new Scanner(System.in);
		
		System.out.print("국어 성적을 입력하세요 : ");
		int kor = sc.nextInt();
		System.out.print("수학 성적을 입력하세요 : ");
		int mat = sc.nextInt();
		
		sum = kor + mat;
		avg = sum/2.0f;
		
		System.out.println("합 계 : " + sum + "점 입니다.");
		System.out.println("평 균 : " + avg + "점 입니다.");

	}

}

이유는 아래의 avg 변수에서 sum/2가 아니라 sum/2.0f를 해줘야 한다는 것! 또는 sum/2f를 해줘도 된다. 다만 f는 빼면 안 된다.

import java.util.Scanner;

public class SungJuk {

	public static void main(String[] args) {
		int sum = 0;
		double avg = 0;
		Scanner sc = new Scanner(System.in);
		
		System.out.print("국어 성적을 입력하세요 : ");
		int kor = sc.nextInt();
		System.out.print("수학 성적을 입력하세요 : ");
		int mat = sc.nextInt();
		
		sum = kor + mat;
		avg = sum/2.0;
		
		System.out.println("합 계 : " + sum + "점 입니다.");
		System.out.println("평 균 : " + avg + "점 입니다.");

	}

}

더블로 바꿨을 때는 이렇다. 더블은 기본 데이터 타입이라서 d가 생략 되어도 된다.