관리 메뉴

도드넷

C# 소숫점 처리 - 소수점 첫째자리 둘째자리 올림 반올림! (Feat. 유니티) 본문

창고/게임 개발 [Hidden]

C# 소숫점 처리 - 소수점 첫째자리 둘째자리 올림 반올림! (Feat. 유니티)

도드! 2020. 3. 14. 10:34
반응형




C# 다양한 소숫점 처리 하는 방법

- C#에서 소숫점(소수점) 첫째자리 둘째자리 까지만 표시하기 

소숫점 반올림 올림 내림 자르기 하는 방법 총 정리!


(feat. 유니티)



1. 소숫점 자리 표시 string.Format


포멧함수는 꽤나 유용한 개꿀함수다.


예를들어 유닛의 현재 체력을 표시해야하는데


float 으로 152.38537 이다.


이걸 다 UI에 표시하면 너무 길고 복잡해보인다. @_@;


 이걸 만약


현재체력표시기.text = string.Format("{0:0.#}", 152.38537);


처리를 해주면 152.4 (자동 반올림) 으로 표시된다.


이 함수가 좋은점은 if 없이도 소숫점이 없으면 그냥 152를 표시하고

있으면 지정된 자릿수까지만 반올림 표시한다.


만약 두자릿수 까지 표시하고 싶다면


string.Format("{0:0.##}, ...)" 으로 하면 된다.


만약 0 도 강제로 표시하고 싶으면 string.Format("{0:0.0}", ...) 으로 하면 된다. 

(ms 시간제한 타이머 표시같은 경우)



2. 소숫점 자르기 Math.Truncate


내림, 자르기 함수다.


1번 함수 같은경우 반올림이 자동으로 내장되어 있는데 만약 체력이 33.1921 이면

string.Format("{0:0.#}", 33.1921) 을 처리하면 33.2 라고 표시한다.


뭐 체력같은경우는 33.19 나 33.2 나 별차이없는데 내가 만들고 있는 게임은 턴제 CRPG라 

"현재 남아있는 행동력(AP)"도 표시해야 하는데

0.9 와 1 의 차이는 스킬을 쓰고 못쓰고 차이 이므로 막 반올림을 하면 안된다. -_-;


그때는 자르기 함수 Math.Truncate 로 처리해 줘야한다.


(주의 : using System; 참조 필요함.)


현재 행동력이 0.985 이다.


float 표시해야할_행동력값 = (float)(Math.Truncate(0.985 * 10) / 10);


해주면 소숫점 첫째 자리 빼고 다 잘라버린다.


즉 0.985 가 0.9가 된다. 

(표시용으로 값을 복사하므로 수정해도 무상관)


여튼 이걸 다시 string.Format("{0:0.#}", 표시해야할_행동력값)


해주면 문제없이 표시된다.




첫째자리 까지 만 자르기 : Math.Truncate(수정할_값 * 10) / 10


둘째자리 까지 만 자르기 : Math.Truncate(수정할_값 * 100) / 100


...




3. 가장 간단한 (int) 처리


(int)(2343.9422) = 2343


소숫점은 그냥 무자비하게 내림, 잘라버린다.

쉽고 깔끔하고 간단한 값 표기 방법이다. 하지만 1 이하 단위가 몽땅 0이 되므로 

1이하 값으로 떨어지는 경우 혹은 소숫점 단위까지 필요한 세밀한 값의 경우 사용에 주의해야한다. 



4. Floor 올림처리 (무조건 가장 큰 정수로)


일반 C# (using System 참조) : Math.Floor(382.19348) = 383

유니티 C# : Mathf.Floor(382.19348) = 383


5. Round 반올림 처리 (#.5 부터 ↑)


일반 C# (using System 참조) : Math.Round(1.5) = 2

유니티 C# : Mathf.Round(1.4) = 1



ㅇ_ㅇ)/ 


포니조아!





반응형
Comments