티스토리 뷰

팀의 승률을 구하는 코드를 작성한 후 출력한 결과

아래와 같이 소수점이 출력되었다.

 

 

 

	@Override
	public double calculateWinningRate(String teamId) {
		String SQL = "SELECT COUNT(*) FROM t_score WHERE teamId=? AND ts_result='Win'";
		int totalWins = template.queryForObject(SQL, Integer.class, teamId);
		
		String totalGamesSQL = "SELECT COUNT(*) FROM t_score WHERE teamId=?";
		int totalGames = template.queryForObject(totalGamesSQL, Integer.class, teamId);
		
		if(totalGames>0) {
			return ((double) totalWins/totalGames)*100;
		}
		else {
			return 0.0;
		}
		
	}

 

너무 많은 소수점이 출력된다.

그러므로 소수점 세자리수까지 출력되도록 변경해주었다.

 

소수점을 지정하는 방법은 두가지가 있다.

format와 round함수 사용하는 방법이 있는데

 

 

 

 

1. format을 사용하여 String으로 형변환하여 사용하기

 

@Override
public String calculateWinningRate(String teamId) {
    String SQL = "SELECT COUNT(*) FROM t_score WHERE teamId=? AND ts_result='Win'";
    int totalWins = template.queryForObject(SQL, Integer.class, teamId);

    String totalGamesSQL = "SELECT COUNT(*) FROM t_score WHERE teamId=?";
    int totalGames = template.queryForObject(totalGamesSQL, Integer.class, teamId);

    if (totalGames > 0) {
        return String.format("%.3f", ((double) totalWins / totalGames) * 100);
    } else {
        return "0.000"; // or any default value
    }
}

 

 

 

 

 

2. Math.round 사용하여 형변환 없이 double로 유지한채 사용하기

 

@Override
public double calculateWinningRate(String teamId) {
    String SQL = "SELECT COUNT(*) FROM t_score WHERE teamId=? AND ts_result='Win'";
    int totalWins = template.queryForObject(SQL, Integer.class, teamId);

    String totalGamesSQL = "SELECT COUNT(*) FROM t_score WHERE teamId=?";
    int totalGames = template.queryForObject(totalGamesSQL, Integer.class, teamId);

    if (totalGames > 0) {
        double winningRate = ((double) totalWins / totalGames) * 100;
        return Math.round(winningRate * 1000.0) / 1000.0; // 소수점 3자리까지 표현
    } else {
        return 0.0;
    }
}

 

 

 

나는 여기에서 형변환을 하지않는 두번째 방법을 사용하였다.

그럼 아래와 같이 출력 결과가 나온다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday