c# 형 string.Format 진수변환 질문
조회수 1371회
string.Format 으로 네칸마다 띄어쓰기 하는 형식으로 변환하고 result 값은 16진수, 8진수로 변환하는걸 하려는데 dec는 제대로 출력되는데 hex 와 oct 는 형식이 변환이 안되네요. Convert toString 쓴탓인것같은데 수정 좀 해주시면 감사하겠습니다.
tbNum.Text = string.Format("{0:###,###,##0}",result);
isClear = true;
tbDec.Text = string.Format("{0:###,###,##0}", result);
tbHex.Text = string.Format("{0:#### #### ###0}",Convert.ToString(result, 16));
tbOct.Text = string.Format("{0:### ### ##0}", Convert.ToString(result,8));
1 답변
-
C#은 한번도 만져본 적 없는데 같은 질문을 계속 올리셔서 조금 찾아봤습니다
result값은 숫자고 이걸 특정 양식에 맞게 출력하시려는 것 같네요
hex와 oct에 형식 적용이 안되는 건 Tostring을 거치면 숫자가 16진수, 8진수로 표현된 문자열로 바뀌기 때문입니다
아마도 저 format을 적용하기 위한 대상이 숫자여야 해서 적용이 안되는 것 같네요
public class Hello1 { public static void Main() { int result = 34243323; System.Console.WriteLine(string.Format("{0:### ### ##0}", System.Convert.ToString(result, 8))); int r = System.Int32.Parse(System.Convert.ToString(result,8)); System.Console.WriteLine("{0:### ### ##0}", r); } }
이런 식으로 실행해봤더니 Tostring만 거친 경우에는 format이 적용이 안되지만 숫자로 다시 변환한 경우에는 적용이 되는 것을 확인했습니다.
8진수의 경우 각 자리에 올 수 있는 숫자가 int 범위이기 때문에 이 문자열을 다시 decimal로 바꾸어도 문제가 생기지 않아서 저게 가능하지만,
16진수의 경우에는 각 자리에 알파벳이 올 수 있기 때문에 저렇게 하면 오류가 납니다.
그래서 차라리 문자열을 파싱해서 사이에 space를 넣는 방향으로 구현하시면 될 듯 싶습니다.
그리고 이번엔 답변을 기다리시기보다 직접 그 방법을 찾아보시면 더 좋을 것 같아요
댓글 입력