콘텐츠로 건너뛰기

c# string format 2자리 소수점 공백 특정문자 채우기

시간을 설정할때 특히 1시부터 9시까지, 1분부터 9분까지, 1초부터 9초까지 아랫처럼 포맷되는 경우를 볼 수 있습니다.

1:7:2

이 부분을 아래 포맷형식으로 바꾸고 싶을때 사용합니다.

String.Format("{0:00}:{1:00}:{2:00}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second)

01:07:02

 

숫자의 경우에는 위의 포맷형식으로 2자리 공백을 숫자 ‘0’으로 채울때 주로 사용합니다.

 

그 이외 숫자가 아닌 특정 문자를 이용하여 자릿수를 채울때에는 PadLeft(), PadRight() 메소드를 사용합니다.

이 매소드는 String 문자열에 대한 매소드이므로 숫자로된 표기가 있다면 꼭 ToString() 문자열로 바꾼 후에 사용해야합니다.

int indexNumber;

int 점점점갯수;
string 자동모드_점점점 = "ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ";



// 위의 변수를 모두 전역변수로 설정하고 아래 문자열을 timer에 넣어서 indexNumber++ 돌리면 위의 움짤처럼 동작하게됩니다.

 int 점점점갯수 = Math.Abs(점점점.Length - (indexNumber++ % ((자동모드_점점점.Length) * 2)));

string.Format("자동모드 진행 중 [ {0,9} ] {1,22}", indexNumber.ToString().PadLeft(9, '0'), 점점점.Substring(점점점갯수));

 

 

참고로 c#에서 소숫점 자리 2자리 3자리 … 10자리 만들때에는 아래처럼 해야합니다.

방법이 조금 다릅니다.

string.Format("{0:N2}", 0.12758663) // 0.12

string.Format("{0:N3}", 0.12758663) // 0.127

string.Format("{0:N4}", 0.12758663) // 0.1275

 

이때 소숫점이 1000보다 클 경우 자동으로 콤마가 붙습니다.

이를 막을려면 Math 함수를 이용하여 Round() 같은 매소드로 특정 자릿수 이하를 제거하고 단순하게 string.Format(“{0}”, Math.Rount(0.12758663, 3) // 0.127

string.Format("{0}", Math.Round(1270.12758663, 3)) // 1270.128 자동으로 마지막 소수점 세자리부분에서 반올림하고 콤마 없이 표기

 

Math.Ceiling(1270.12758663) // 올림 1270

Math.Truncate(1270.12758663) // 버림 1270

하지만 특정 소수점 자리이하를 올리거나 버리지는 못하죠.

이때 방법은 5번째자리를 올리거나 버리고 싶다면 소수에 10에 5승 [ Math.Pow(10, 5) ] 값을 곱하고 Round() 처리하고 다시 10의 5승 값을 나누면됩니다.

조금 복잡해보이기는 하지만 응용하여 사용하면됩니다.