(Q) BMI 계산기
BMI는 체질량지수(비만지수)를 말합니다.
구하는 공식은 'BMI = 체중(kg) / 키(m)^2' 입니다.
키가 180cm이고, 체중이 80kg인 사람의 BMI 지수를 구하여 출력
package day02;
import java.lang.*;
public class Day02_data_Test14 {
public static void main(String[] args) {
int kgWeight = 80;
int cmHeight = 180;
double mHeight = (double)cmHeight / 100;
double mHeightSquare = mHeight * mHeight;
double bmi = kgWeight / mHeightSquare;
double bmiDecimal = bmi * 100 / 100;
System.out.println(bmiDecimal);
}
}
변수
- kgWeight : 몸무게 [kg]
- cmHeight : 키 [cm]
- mHeight : 키 [m]
1) 단위 환산시 소수점 이하를 버리면 오차가 커진다
- mHeight를 구할 때 변수 타입을 정수형으로 선언하면 소수점 이하가 버림되어 데이터가 1.8이 아닌 1이 된다
- mHeight를 구할 때 변수 타입을 실수형으로 선언해야 소수점 이하를 고려하여 1.8을 저장할 수 있다
2) mHeight의 제곱을 나타내는 방법
- mHeightSquare라는 제곱을 나타내는 변수를 직접 선언하는 방법
double mHeightSquare = mHeight * mHeight; //제곱을 나타내는 변수 선언
double bmi = kgWeight / mHeightSquare;
- kgWeight에서 mHeight를 직접 2번 나누는 방법 (컴퓨터 연산의 순셔는 좌에서 우로 진행한다)
double bmi = kgWeight / mHeight / mHeight; //kgWeight를 직접 2번 나누는 방법
3) 소수점 이하 2자리까지만 표시하는 방법
- 10의 거듭제곱을 곱한 후(*) 나누는(/) 방법
double bmiDecimal = bmi * 100 / 100;
- 라이브러리를 이용하는 방법 (Scanner를 쓸 때 필요했던 import java.util.Scanner와는 달리 import 구절이 필요 없다?)
//DecimalFormat 라이브러리 형태
DecimalFormat 변수명 = new DecimalFormat("0.00");
//DecimalFormat 라이브러리를 이용하여 bmi 출력의 형태를 변경
DecimalFormat fm = new DecimalFormat("0.00");
System.out.println(fm.format(bmi));
** 소수점을 구하려고 시도해봤던 방법과 출력이 부정확했던 이유?
i) double bmi = kgWeight / (cmHeight * cmHeight / 10000);
- 'cmHeight * cmHeight'의 결과가 32400이며 '/ 10000'를 연산하는 과정에서 소수점 이하 버림이 발생하여 오차 발생
ii) double bmi = kgWeight / (cmHeight / 100) / (cmHeight / 100);
- 'cmHeight / 100'을 하는 과정에서 1.8이 아닌 1이 나오므로 오차 발생
- cmHeight 앞에 형 변환을 했어야 했다
'국비교육 > 국비교육 복습' 카테고리의 다른 글
Day03_data_Test19 : 논리 연산자 boolean(2) (0) | 2022.07.31 |
---|---|
Day03_data_Test18 : 논리 연산자 boolean (0) | 2022.07.31 |
Day02_data_Test13 : 나누기 연산 + 형 변환 (★) (0) | 2022.07.31 |
Day02_data_Test09 : 나누기 연산의 몫과 나머지 + 소수점 표기 방법 (0) | 2022.07.30 |
Day02_data_Test08 : 나누기 연산의 몫과 나머지 (0) | 2022.07.30 |