PDA

View Full Version : تبدیل عدد به حرف



dastiary
دوشنبه 15 خرداد 1385, 15:33 عصر
سلام
لطفا یه نمونه کد برای گرفتن معادل عدد به حروف میخوام.

فوریه

sasan_vm
پنج شنبه 18 خرداد 1385, 16:22 عصر
/////////////////////////////////////////////////////
//
// Number.h
//
/////////////////////////////////////////////////////

#ifndef __NUMBER_H___
#define __NUMBER_H___
enum NumberError { INVALIDNUM, LONGNUM, NONE };
class TNumber : public TObject
{
public:
TNumber();
__fastcall ~TNumber();
private:
AnsiString FNumber;
AnsiString FString;
NumberError FError;
bool FRial;
bool FZero;
void __fastcall Convert();
void SelectStr(AnsiString num, int pow);
void __fastcall SetNumber(AnsiString value);
AnsiString __fastcall GetString();
NumberError __fastcall GetError();
bool __fastcall Check();
__published:
__property AnsiString Number = { write=SetNumber };
__property AnsiString String = { read=GetString };
__property NumberError Error = { read=GetError };
__property bool Rial = { read=FRial, write=FRial };
__property bool Zero = { read=FZero, write=FZero };
};
#endif __NUMBER_H___


/////////////////////////////////////////////////////
//
// Number.cpp
//
/////////////////////////////////////////////////////
#include <vcl.h>
#include "Number.h"
#define MAXLEN 24 // define max length on number 10^36
//-------------------------------------------------------------------------
TNumber::TNumber() : TObject()
{
FNumber = "";
FString = "";
FRial = true;
FZero = true;
FError = NONE;
}
//-------------------------------------------------------------------------
__fastcall TNumber::~TNumber()
{
}
//-------------------------------------------------------------------------
void __fastcall TNumber::SetNumber(AnsiString Value)
{
if ( FNumber != Value )
{
FNumber = Value;
Convert();
}
}
//-------------------------------------------------------------------------
AnsiString __fastcall TNumber::GetString()
{
return FString;
}
//-------------------------------------------------------------------------
NumberError __fastcall TNumber::GetError()
{
return FError;
}
//-------------------------------------------------------------------------
bool __fastcall TNumber::Check()
{
//TODO: Add your source code here
bool Result = true;
int Len = FNumber.Length();
FError = NONE;
if ( Len > MAXLEN )
{
FError = LONGNUM;
Result = false;
}
else
for ( int i = 1; i <= Len; i++ )
if ( FNumber[i] < '0' || FNumber[i] > '9' )
{
FError = INVALIDNUM;
Result = false;
break;
}
return Result;
}
//-------------------------------------------------------------------------
void __fastcall TNumber::Convert()
{
//TODO: Add your source code here
AnsiString Num;
int Len, Div, Mod, Div2, Div3;
if ( !Check() )
{
FString = FError == LONGNUM ? "ERROR: Long number" : "ERROR: Inavlid number";
return;
}
FString = "";
Len = FNumber.Length();
Div = Len / 3;
Mod = Len % 3;
Div3 = Div;
if ( Mod > 0 )
{
Num = FNumber.SubString(1, Mod);
SelectStr(Num, Div3+1);
}
for ( Div2 = 0; Div2 < Div; Div2++ )
{
Num = FNumber.SubString(Mod+(Div2*3)+1, 3);
SelectStr(Num, Div3--);
}
if ( FError == NONE )
{
if ( FString.IsEmpty() && FZero )
FString = "صفر";
if ( FRial )
FString = FString + " ریال";
}
}
//-------------------------------------------------------------------------
void TNumber::SelectStr(AnsiString Num, int Pow)
{
//TODO: Add your source code here
AnsiString Str;
int nDiv, Div[3];
static const char *PowStr[] = {"", " هزار", " میلیون", " بیلیون", " تریلیون", " کاتریلیون", " کوین تیلیون", " سیکس تیلیون", NULL};
try
{
nDiv = Num.ToInt();
for ( int i = 0; i < 3; i++ )
{
Div[i] = nDiv % 10;
nDiv = nDiv / 10;
}
if ( Div[2] != 0 )
{
switch ( Div[2] )
{
case 1: Str = "یکصد"; break;
case 2: Str = "دویست"; break;
case 3: Str = "سیصد"; break;
case 4: Str = "چهارصد"; break;
case 5: Str = "پانصد"; break;
case 6: Str = "ششصد"; break;
case 7: Str = "هفتصد"; break;
case 8: Str = "هشتصد"; break;
case 9: Str = "نهصد"; break;
}
FString = FString + (FString.IsEmpty() ? "" : " و ") + Str;
}
if ( Div[1] != 0 )
if ( Div[1] == 1 )
{
switch ( Div[0] )
{
case 0: Str = "ده"; break;
case 1: Str = "یازده"; break;
case 2: Str = "دوازده"; break;
case 3: Str = "سیزده"; break;
case 4: Str = "جهارده‌";break;
case 5: Str = "پانزده"; break;
case 6: Str = "شانزده"; break;
case 7: Str = "هفده"; break;
case 8: Str = "هجده"; break;
case 9: Str = "نوزده"; break;
}
FString = FString + (FString.IsEmpty() ? "" : " و ") + Str;
}
else
{
switch ( Div[1] )
{
case 1: Str = "ده"; break;
case 2: Str = "بیست‏"; break;
case 3: Str = "سی"; break;
case 4: Str = "چهل‌"; break;
case 5: Str = "پنچاه"; break;
case 6: Str = "شصت"; break;
case 7: Str = "هفتاد"; break;
case 8: Str = "هشتاد"; break;
case 9: Str = "نود"; break;
}
FString = FString + (FString.IsEmpty() ? "" : " و ") + Str;
switch ( Div[0] )
{
case 1: Str = "یک"; break;
case 2: Str = "دو"; break;
case 3: Str = "سه"; break;
case 4: Str = "چهار‌"; break;
case 5: Str = "پنج"; break;
case 6: Str = "شش"; break;
case 7: Str = "هفت"; break;
case 8: Str = "هشت"; break;
case 9: Str = "نه"; break;
default: Str = "";
}
if ( Str.IsEmpty() )
Str = " ";
else
Str = " و " + Str;
FString = FString + Str;
}
else
if ( Div[0] != 0 )
{
switch ( Div[0] )
{
case 1: Str = "یک"; break;
case 2: Str = "دو"; break;
case 3: Str = "سه"; break;
case 4: Str = "چهار‌"; break;
case 5: Str = "پنج"; break;
case 6: Str = "شش"; break;
case 7: Str = "هفت"; break;
case 8: Str = "هشت"; break;
case 9: Str = "نه"; break;
}
FString = FString + (FString.IsEmpty() ? "" : " و ") + Str;
}
if ( !Str.IsEmpty() )
FString = FString + PowStr[Pow-1];
}
catch(Exception & e)
{
Application->ShowException(&e);
}
}
//-------------------------------------------------------------------------

BitMap
دوشنبه 12 تیر 1385, 07:20 صبح
اگه منظور شما تبدیل عدد به رشته است
می تواننید از تابع کتابخانه ای itoa استفاده کنید