ورود

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



Web Matrix Pro
شنبه 29 مهر 1385, 15:58 عصر
سلام
من یه تابع می خوام که عدد رو به حروف تبدیل کنه تا ا میلیاد هم باشه خوبه
با تشکر

rezaTavak
شنبه 29 مهر 1385, 23:22 عصر
سلام

قبلا یکی بود فکر کنم سایت update شده پاک شده:





FUNCTION StringRial
LPARAMETERS tnRial
LOCAL lcOutput,lcRial,lnIndex, lnLoop, lcTemp
#DEFINE WA 'æ'
lcRial = ALLTRIM(STR(tnRial))
lcOutput = ''
lnLoop = LEN(lcRial)
FOR lnIndex = 1 TO lnLoop STEP 3
lcTemp = num100(RIGHT(lcRial,3))
lcOutPut = IIF(NOT EMPTY(lcTemp),lcTemp+HMMBT(lnIndex)+IIF(NOT EMPTY(lcOutput),WA,''),'') + lcOutPut
lcRial = LEFT(lcRial,LEN(lcRial)-3)
NEXT
IF EMPTY(lcOutput)
lcOutput = 'ÕÝÑ'
ENDIF
RETURN lcOutput
ENDFUNC

FUNCTION HMMBT
LPARAMETERS tnNumber
#DEFINE HEZAR 'åÒÇÑ'
#DEFINE MILLION 'ãíáíæä '
#DEFINE MILLIARD 'ãíáíÇÑÏ'
#DEFINE BILLION 'Èíáíæä '
#DEFINE TRILLION 'ÊÑíáíæä '
DO CASE
CASE tnNumber = 1
RETURN ''
CASE tnNumber = 4
RETURN HEZAR
CASE tnNumber = 7
RETURN MILLION
CASE tnNumber = 10
RETURN MILLIARD
CASE tnNumber = 13
RETURN BILLION
CASE tnNumber = 16
RETURN TRILLION
ENDCASE
ENDFUNC

FUNCTION Num100
LPARAMETERS tcNumber
LOCAL lnSad,lnDah,lnYek,laYek,laDah,laDah2,laSad,lcOutpu t
tcNumber = PADL(tcNumber,3,'0')
lnSad = VAL(SUBSTR(tcNumber,1,1))
lnDah = VAL(SUBSTR(tcNumber,2,1))
lnYek = VAL(SUBSTR(tcNumber,3,1))
DIMENSION laYek(10),laDah(10),laDah2(10),laSad(10)
laYek(1) = ''
laYek(2) ='íß '
laYek(3) ='Ïæ '
laYek(4) ='Óå '
laYek(5) ='چåÇÑ'
laYek(6) ='پäÌ '
laYek(7) ='ÔÔ '
laYek(8) ='åÝÊ '
laYek(9) ='åÔÊ '
laYek(10) ='äå '
laDah(1) ='Ïå '
laDah(2) ='íÇÒÏå '
laDah(3) ='ÏæÇÒÏå '
laDah(4) ='ÓíÒÏå '
laDah(5) ='چåÇÑÏå '
laDah(6) ='پÇäÒÏå '
laDah(7) ='ÔÇäÒÏå '
laDah(8) ='åÝÏå '
laDah(9) ='åÌÏå '
laDah(10) ='äæÒÏå '
laDah2(2) ='ÈíÓÊ '
laDah2(3) ='Óí '
laDah2(4) ='چåá '
laDah2(5) ='پäÌÇå '
laDah2(6) ='ÔÕÊ'
laDah2(7) ='åÝÊÇÏ'
laDah2(8) ='åÔÊÇÏ'
laDah2(9) ='äæÏ'
laSad(1) = ''
laSad(2) ='íßÕÏ'
laSad(3) ='ÏæíÓÊ '
laSad(4) ='ÓíÕÏ'
laSad(5) ='چåÇÑÕÏ'
laSad(6) ='پÇäÕÏ'
laSad(7) ='ÔÔÕÏ'
laSad(8) ='åÝÊÕÏ'
laSad(9) ='åÔÊÕÏ'
laSad(10) ='äåÕÏ'
lcSad = laSad(lnSad+1)
lcDah =IIF(lnDah > 1 ,laDah2(lnDah)+IIF(lnYek#0,WA+laYek(lnYek+1),''),I IF( lnDah = 0 , IIF(lnYek#0,laYek(lnYek+1),''), laDah(lnYek+1)))
lcOutput = IIF(NOT EMPTY(lcSad) AND NOT EMPTY(lcDah),lcSad+WA+lcDah,lcSAD+lcDah)
RETURN lcOutPut
ENDFUNC

kia1349
یک شنبه 30 مهر 1385, 12:16 عصر
اینم برنامه اش





*********
*PROC NTOC
*********
PARAMETER Number
PRIVATE Number, Sgn, Len, Unit, LastUnit, String, Vav, Bignum1, ;
Bignum2, Bignum3, Strs, Loc, Digit, Sub

* SET STEP ON
M.Number = IIF(TYPE("M.Number") = "N", LTRIM(STR(M.Number, 15)), M.Number)
IF VAL(M.Number) > 999999999999999 OR VAL(M.Number) < -999999999999999
RETURN ("-1")
ENDIF
M.Sgn = IIF (VAL(M.Number) < 0 , "&#227;&#228;&#221;&#237; " , "")
IF VAL(M.Number) = 0
RETURN "&#213;&#221;&#209;"
ENDIF
M.Number = IIF(LEFT(M.Number,1) = "-", SUBSTR(M.Number,2), M.Number)
M.Len = LEN(M.Number)
STOR " " TO Unit,LastUnit
M.String = ""
M.Vav = "&#230;"
DIME Strs(3)
Strs(1) = "&#237;&#223; &#207;&#230; &#211;&#229; چ&#229;&#199;&#209; پ&#228;&#204; &#212;&#212; &#229;&#221;&#202; &#229;&#212;&#202; &#228;&#229; &#207;&#229; &#237;&#199;&#210;&#207;&#229; &#207;&#230;&#199;&#210;&#207;&#229; &#211;&#237;&#210;&#207;&#229; چ&#229;&#199;&#209;&#207;&#229; پ&#199;&#228;&#210;&#207;&#229; &#212;&#199;&#228;&#210;&#207;&#229; &#229;&#221;&#207;&#229; &#229;&#204;&#207;&#229; &#228;&#230;&#210;&#207;&#229; "
Strs(2) = "&#207;&#229; &#200;&#237;&#211;&#202; &#211;&#237; چ&#229;&#225; پ&#228;&#204;&#199;&#229; &#212;&#213;&#202; &#229;&#221;&#202;&#199;&#207; &#229;&#212;&#202;&#199;&#207; &#228;&#230;&#207; "
Strs(3) = "&#237;&#223;&#213;&#207; &#207;&#230;&#237;&#211;&#202; &#211;&#237;&#213;&#207; چ&#229;&#199;&#209;&#213;&#207; پ&#199;&#228;&#213;&#207; &#212;&#212;&#213;&#207; &#229;&#221;&#202;&#213;&#207; &#229;&#212;&#202;&#213;&#207; &#228;&#229;&#213;&#207; "
DO WHILE .T.
M.Digit = VAL(LEFT(M.Number,1))
M.Loc = MOD(M.Len,3)
IF M.Loc = 2 AND M.Digit = 1
M.Digit = VAL(LEFT(M.Number,2))
M.Loc = 1
ELSE
IF M.Loc = 0
M.Loc = 3
ENDIF
ENDIF
IF M.Digit # 0
DO CASE
CASE M.Len > 3 AND M.Len < 7
M.Unit = "&#229;&#210;&#199;&#209;"
CASE M.Len > 6 AND M.Len < 10
M.Unit = "&#227;&#237;&#225;&#237;&#230;&#228;"
CASE M.Len > 9 AND M.Len < 13
M.Unit = "&#227;&#237;&#225;&#237;&#199;&#209;&#207;"
CASE M.Len > 12 AND M.Len < 16
M.Unit = "&#202;&#209;&#237;&#225;&#237;&#230;&#228;"
ENDCASE
ENDIF
M.Sub = IIF(M.Digit # 0, ALLTRIM(SUBSTR(Strs(M.Loc),(M.Digit-1)*7+1, 7)), "")
M.Len = M.Len - LEN(LTRIM(STR(M.Digit)))
M.Number = RIGHT(M.Number, M.Len)
IF M.Unit # M.LastUnit AND ((M.Loc = 1 OR (M.Loc = 3 .AND. VAL(M.Number) = 0)) ;
OR VAL(M.Number) = 0)
M.Sep = IIF(VAL(M.Number) > 0 , M.Vav , "")
M.String = IIF(LEN(M.Sub)=0, ALLTRIM(STRTRAN(M.String, M.Sep, "", OCCURS(M.Sep, M.String), 1)), ;
ALLTRIM(M.String)) + " " + M.Sub + " " + M.Unit + " " + M.Sep
M.LastUnit = M.Unit
ELSE
M.Sep = IIF(VAL(M.Number) > 0 AND LEN(M.Sub) # 0 AND M.Len > 0 AND M.Digit # 0, ;
M.Vav, "")
M.String = ALLTRIM(ALLTRIM(M.String) + " " + M.Sub + " " + M.Sep)
ENDIF
IF M.Len <= 0 OR VAL(M.Number) = 0
RETURN M.Sgn + ALLTRIM(M.String)
ENDIF
ENDDO
RETURN M.String

rezamim
دوشنبه 01 آبان 1385, 17:45 عصر
اینم کد من. یکم عجیبه نه؟



PROCEDURE NUMTOCHR
PARAMETER Num
PUBLIC ArrayDigit (36)
ArrayDigit (01) = " &#237;&#223; "
ArrayDigit (02) = " &#207;&#230; "
ArrayDigit (03) = " &#211;&#229; "
ArrayDigit (04) = " چ&#229;&#199;&#209; "
ArrayDigit (05) = " پ&#228;&#204; "
ArrayDigit (06) = " &#212;&#212; "
ArrayDigit (07) = " &#229;&#221;&#202; "
ArrayDigit (08) = " &#229;&#212;&#202; "
ArrayDigit (09) = " &#228;&#229; "
ArrayDigit (10) = " &#207;&#229; "
ArrayDigit (11) = " &#237;&#199;&#210;&#207;&#229; "
ArrayDigit (12) = " &#207;&#230;&#199;&#210;&#207;&#229; "
ArrayDigit (13) = " &#211;&#237;&#210;&#207;&#229; "
ArrayDigit (14) = " چ&#229;&#199;&#209;&#207;&#229; "
ArrayDigit (15) = " پ&#199;&#228;&#210;&#207;&#229; "
ArrayDigit (16) = " &#212;&#199;&#228;&#210;&#207;&#229; "
ArrayDigit (17) = " &#229;&#221;&#207;&#229; "
ArrayDigit (18) = " &#229;&#237;&#204;&#207;&#229; "
ArrayDigit (19) = " &#228;&#230;&#210;&#207;&#229; "
ArrayDigit (20) = " &#200;&#237;&#211;&#202; "
ArrayDigit (21) = " &#211;&#237; "
ArrayDigit (22) = " چ&#229;&#225; "
ArrayDigit (23) = " پ&#228;&#204;&#199;&#229; "
ArrayDigit (24) = " &#212;&#213;&#202; "
ArrayDigit (25) = " &#229;&#221;&#202;&#199;&#207; "
ArrayDigit (26) = " &#229;&#212;&#202;&#199;&#207; "
ArrayDigit (27) = " &#228;&#230;&#207; "
ArrayDigit (28) = " &#213;&#207; "
ArrayDigit (29) = " &#207;&#230;&#237;&#211;&#202; "
ArrayDigit (30) = " &#211;&#237;&#213;&#207; "
ArrayDigit (31) = " چ&#229;&#199;&#209;&#213;&#207; "
ArrayDigit (32) = " پ&#199;&#228;&#213;&#207; "
ArrayDigit (33) = " &#212;&#212;&#213;&#207; "
ArrayDigit (34) = " &#229;&#221;&#202;&#213;&#207; "
ArrayDigit (35) = " &#229;&#212;&#202;&#213;&#207; "
ArrayDigit (36) = " &#228;&#229;&#213;&#207; "
DO CASE
CASE Num >= 1000000000000000
RETURN NumToChr (Num / 1000000000000000) + "&#202;&#209;&#237;&#225;&#237;&#199;&#209;&#207; " + IIF (Num % 1000000000000000 < 1, '', "&#230;") + NumToChr (Num % 1000000000000000)
CASE Num >= 1000000000000
RETURN NumToChr (Num / 1000000000000) + "&#202;&#209;&#237;&#225;&#237;&#230;&#228; " + IIF (Num % 1000000000000 < 1, '', "&#230;") + NumToChr (Num % 1000000000000)
CASE Num >= 1000000000
RETURN NumToChr (Num / 1000000000) + "&#227;&#237;&#225;&#237;&#199;&#209;&#207; " + IIF (Num % 1000000000 < 1, '', "&#230;") + NumToChr (Num % 1000000000)
CASE Num >= 1000000
RETURN NumToChr (Num / 1000000) + "&#227;&#237;&#225;&#237;&#230;&#228; " + IIF (Num % 1000000 < 1, '', "&#230;") + NumToChr (Num % 1000000)
CASE Num >= 1000
RETURN NumToChr (Num / 1000) + "&#229;&#210;&#199;&#209; " + IIF (Num % 1000 < 1, '', "&#230;") + NumToChr (Num % 1000)
CASE Num >= 100
RETURN ArrayDigit (27 + Num / 100) + IIF(Num % 100 < 1, '', "&#230;") + NumToChr (Num % 100)
CASE Num >= 20
RETURN ArrayDigit (18 + Num / 10) + IIF (Num % 10 < 1, '', "&#230;") + NumToChr (Num % 10)
CASE Num >= 1
RETURN ArrayDigit (Num)
ENDCASE
RETURN ''

Web Matrix Pro
شنبه 20 آبان 1385, 14:06 عصر
بسیار عالی -ولی حروف فارسی در کد شما ناخواناسب

kia1349
یک شنبه 21 آبان 1385, 07:30 صبح
اینم برنامه

rezamim
دوشنبه 22 آبان 1385, 11:07 صبح
اینم برنامه ( تکه برنامه ) من !
تا تریلیارد جواب میده . یعنی 1000000000000000 ! شایدم بیشتر. خوشبختانه هنوز دارائیهام بزرگتر از این عدد نشده که ببینم جواب میده یا نه !!!!

javad_1349
پنج شنبه 30 آذر 1385, 10:02 صبح
سلام براساتید خودم واقعا عالی بود متشکرم