Math.Floor(Math.Log10(n) + 1); 를 이용해
문자열을 사용하지않고 숫자의 길이를 알수있다
Math.Log10(n)은 10의 몇제곱이 n인지를 나타낸다.
예를 들어보자면 10은 10의 1제곱이기에
n에 10을 넣으면 1이 나온다.
100을 넣으면 10의 2제곱이기에 2가 나오고,
1000을 넣으면 3이 나온다.
그렇다는건 10 ~ 99까지의 수는 1 ~ 1.999xxx가 최대값일 것이다.
100 ~ 999 는 10 ~ 19.xxx가 최대일 것이고,
1000 부터 1999는 20 ~ 29.xxx가 될것이다.
표처럼 나타내보자면
10 : 1
10 ~ 99 : 1 ~ 9.99....
100 : 2
100 ~ 999 : 2 ~ 2.999....
1000 : 3
1000 ~ 9999 : 3 ~ 3.999.....
이다.
여기서 우리는 자릿수가 올라갈수록 1씩 증가하는걸 볼 수있다.
예를 들어 11 ~99 안의 수는 아마 1.xxx 일텐데,
모두 앞자리가 1이다.
101 ~ 999, 1001 ~ 9999도 마찬가지 이다.
그렇기에 Math.floor (내림)을 사용하여
소수점을 모두 떼어준다.
그럼 10 ~ 99 : 1
100 ~ 999 : 2
1000 ~ 9999 : 3이 된다.
여기서 부족한 숫자인 1을 채워주면
10의 자릿수 숫자는 모두 2가 되어 두자릿수 라는결과가 나온다.
100은 세자릿수 라는 결과가 나온다.
1000도 마찬가지로 네자릿수라는 결과가 나오게 된다.
이걸 학교에서 안배웠지만 이해하고 싶어서 노력해보았다.
살짝 뿌듯하긴 하다.
0은 10의 몇제곱이냐고 물어보면 상식선에선 답할수가 없다.
그래서 프로그램을 돌려보면 - Infinity로 나온다.
무한대로 내려가는 수인가 보다.
그렇기에 코드를 적용해도 똑같이 -Infinity이다.
-Infinity는 정상적인 수가 아니기에
코드상으로 없는, 값이 없는 취급 될때가 많다.
그렇기에 0이란 수의 자릿수 문제를 잘 해결해냈다고 볼 수 있다.
12를 문자열로 나타내어 "12"하면 길이가 2로 제대로 나오지만
0을 문자로 나타내어 "0"이 되면 길이가 1인 문제를 해결할수있다.
유용하게쓰길 바란다
도움이되었길 바라며,
끝.
'게임 개발 > C#' 카테고리의 다른 글
Input.GetAxis 값의 의미 (0) | 2022.08.07 |
---|---|
C# ?로 특정 if문 생략하기 (삼항연산자) (0) | 2022.07.27 |
C# 정수 소수 구분하는법 (2) | 2022.07.15 |
Linq C# 리스트에서 같은수 지우기(중복수 제거) (0) | 2022.07.15 |
유니티 C# 문자열 나누기(split) (0) | 2022.07.14 |
댓글