Backend/Java

[Java] int, double형 계산 시 주의점

yjwoo 2023. 6. 2. 21:27

전체 코드

import java.util.Scanner;

public class Lab01 {
	// 학생 자바 점수 입력받아 저장하는 메소드
	static void inputScore(int[] score, Scanner scr) {
		for (int i = 0; i < score.length; i++) {
			System.out.print("점수>>");
			score[i] = scr.nextInt();
		}
	}

	// int[] score 배열 매개변수로 받아 평균값 반환하는 메소
	static double average(int[] score) {
		int sum = 0;
		for (int i = 0; i < score.length; i++) {
			sum += score[i];
		}
		return sum / score.length;
	}

	public static void main(String[] args) {
		Scanner scr = new Scanner(System.in);
		int[] score;
		System.out.print("학생수>>"); // 학생 수 입력
		int num = scr.nextInt();
		score = new int[num];

		inputScore(score, scr);
		double avg = average(score);
		System.out.println("평균값: " + avg);
	}
}

 


 

 

1. 앞에 (double) 붙이고 나누기( 실수 / 정수 = 실수 )

	static double average(int[] score) {
		int sum = 0;
		for (int i = 0; i < score.length; i++) {
			sum += score[i];
		}
		return (double)sum / score.length;
	}

 

결과

 

 

2. 그대로 나누기 ( 정수 / 정수 = 정수 -> 실수로 변환 )

 

	static double average(int[] score) {
		int sum = 0;
		for (int i = 0; i < score.length; i++) {
			sum += score[i];
		}
		return sum / score.length;
	}

 

결과

 

 


 

- 소수점까지 정확하게 나타내야 한다면 1번 방법으로 코드 만들기!

- 단, 큰 타입의 값을 작은 타입의 값으로 변환시 데이터 손실 발생하므로 주의

예) double(8 byte) -> int(4 byte), 소수점 이하의 손실 발생