티스토리 뷰
자바스크립트는 Math.ceil()
, Math.round()
, Math.floor()
라는 함수를 제공해서 올림, 반올림, 내림을 가능하게 해준다. 그러나 이것은 소숫점 둘째자리까지의 계산이라서 정수 단위의 올림은 불가능하다. 즉, 5.42를 5로 만들 순 있지만 55을 50 또는 60으로 만들 수는 없다.
정수를 올림, 반올림, 내림하려면 아래처럼 추가 작업을 해야 한다.
HTML
<ul>
<li data-value="52">
철수 : <span></span>점
</li>
<li data-value="84">
영희 : <span></span>점
</li>
<li data-value="100">
민수 : <span></span>점
</li>
</ul>
평균점수: <span class="avg"></span>점<br>
평균점수 반올림: <span class="result"></span>점<br>
Javascript
var score = document.querySelectorAll('ul li');
var scorePrint = document.querySelectorAll('ul li span');
var sum = 0;
for(let i=0; i<score.length; i++){
var num = score[i].dataset.value;
scorePrint[i].innerHTML = score[i].dataset.value; // 점수 출력
num = Number(num); //숫자형으로 변환
sum += num;
}
var _avg = sum/score.length; // 78.66666666666667
var avg = Math.round(sum/score.length); // 79
var result = Math.round(avg/10)*10; // 80
document.querySelector('.avg').innerHTML = avg;
document.querySelector('.result').innerHTML = result;
78.6666666 으로 나온 점수를 79로 반올림한 후 다시 80으로 반올림 해준다.
| 결과화면
- 철수 : 52점
- 영희 : 84점
- 민수 : 100점
평균점수: 79점
평균점수 반올림: 80점
| 주의할 점
num = Number(num); //숫자형으로 변환
이 소스에서는 HTML에 입력된 data-value를 가져왔는데 이것은 문자형(string)이기 때문에 + 연산을 하면 덧셈이 되는게 아니라 숫자끼리 붙는다. 10+10이 20이 아니라 1010이 되어버린다. 따라서 반드시 숫자형으로 변환을 해줘야 한다.
| 정리
var result = Math.round(avg/10)*10;
10으로 나누어 소숫점을 만들어준 다음 반올림을 하고 여기에 다시 10을 곱해주어서 정수 반올림을 한다. 같은 방법으로 올림은 Math.ceil
, 내림은 Math.floor
을 하면 된다.
'코딩개발' 카테고리의 다른 글
비개발자 GitHub 깃허브 계정을 만들다 (0) | 2020.10.01 |
---|---|
무료 SSL 인증서 설치하기 - ZeroSSL, cafe24 (1) | 2020.09.21 |
[Redux] 리덕스를 왜 쓸까 (0) | 2020.02.21 |
[Javascript] 탭 만들기 (0) | 2019.12.14 |
[React] Component와 Props (0) | 2019.10.24 |
댓글