C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[46561] Re:아주 큰 수를 사용하려고 합니다.
장성호 [nasilso] 1086 읽음    2006-09-18 14:22
변환문자열함수가 따로 있는지 없는지 몰겠습니다만...
만들어 쓰시면 될것 같습니다.
unsigned __int64 는  0 에서 18446744073709551615 까지 표현이 가능하네요 (21자리.. 조금..까지)
정수형으로 20자리까지는 unsigned __int64 사용하면 문제 없을같구요

unsigned __int64를 String으로 변환하는 함수는 아래와 같이 만들어 쓰시면 될것 같습니다.

대충 생각나는데로 만들어 봤습니다.
그래서 스마트한 코드가 못됩니다.
충분히 테스트해보빈 못했는데... 크게 지장은 없을겁니다.

그럼


String __fastcall UnSignIntToStr( unsigned __int64 kk)
{
    unsigned int tmp;
    String str;
    tmp=kk/100000000000000;
    str=IntToStr(tmp);
    tmp=(kk%100000000000000)/10000000;
    str=str+IntToStr(tmp);
    tmp=(kk%100000000000000)%10000000;
    str=str+IntToStr(tmp);
    return str;
}
unsigned __int64 __fastcall StrToUnSignInt64(String str)
{
    unsigned __int64 tmp=0,tmp1,tmp2,tmp3;
    //int = "0 ~ 4294967295";
    int len=str.Length();
    if(len>15)
    {

        tmp=StrToInt(str.SubString(1,len-15));
        tmp1=tmp*1000000000000000;//tmp*10^15;
        tmp=StrToInt(str.SubString(len-15+1,7));
        tmp2=tmp*100000000 ; //tmp*10^7;
        tmp3=StrToInt(str.SubString(len-15+1+7,8)) ; //tmp*10^8;
        tmp=tmp1+tmp2+tmp3;
    }
    else if( len>9)
    {
        tmp=StrToInt(str.SubString(1,8));
        tmp1=tmp*100000000 ; //tmp*10^7;
        tmp=StrToInt(str.SubString(len-8,8)) ; //tmp*10^8;
        tmp=tmp1+tmp2;
    }
    else
    {
        tmp=StrToInt(str);
    }
    return tmp;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    unsigned __int64 kkk;
    kkk=18446744073709551615;
    ShowMessage(UnSignIntToStr(kkk));
    kkk=1234567809123456780;
    ShowMessage(UnSignIntToStr(kkk));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    unsigned __int64 kkk=StrToUnSignInt64("12304572047520954");
    ShowMessage(UnSignIntToStr(kkk));
    kkk=StrToUnSignInt64("572047520954");
    ShowMessage(UnSignIntToStr(kkk));
}
//---------------------------------------------------------------------------


아주 큰 수를 쓰려고 님이 쓰신 글 :
: 아주 간단할지도 모르겠는데요
:
: 제가 20자리의 숫자를 표현해야 하는데
:
: __int64가 19짜리까지 되더군요(이게 있는지도 오늘 조사하면서 알았음)
:
: 여기 게시판에서 찾아보니 unsigned __int64도 되는거 같던데
:
: 변환문자열이 I64d가 아닌가 봅니다. 흑흑
:
: unsigned __int64의 변환문자열을 써주시면 감사하겠습니다.
:
: 아참 정수형이 아닌 실수형으로 double로 했더니
:
: 정수형으로 했을 때와 달랐습니다.
:
: 이건 double형이 실수형보다 정확도가 떨어져서 인지 알고 싶습니다.

+ -

관련 글 리스트
46541 아주 큰 수를 사용하려고 합니다. 아주 큰 수를 쓰려고 900 2006/09/15
46561     Re:아주 큰 수를 사용하려고 합니다. 장성호 1086 2006/09/18
46713         Re:Re:아주 큰 수를 사용하려고 합니다. 아주 큰 수를 쓰려고 794 2006/10/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.