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를 넣는 방향으로 구현하시면 될 듯 싶습니다.

    그리고 이번엔 답변을 기다리시기보다 직접 그 방법을 찾아보시면 더 좋을 것 같아요

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)