Как преобразовать число в слова в Crystal Reports
Я хочу преобразовать число в слово в полях формулы отчета crystal.
Предположим, что сумма равна 31500
Это должно выглядеть так:
Тридцать одна тысяча пятьсот
Формула="Rs. "+ ToWords ({@calculate_TotalAmtwithChrges},0) + " и "+ToWords ((Round({@calculate_TotalAmtwithChrges},2) - Int({@calculate_TotalAmtwithChrges})) * 100, 0) + " только Пейс"
Пожалуйста, попробуйте с этим кодом
numbervar RmVal:=0;
numbervar Amt:=0;
numbervar pAmt:=0;
stringvar InWords :="рупии ";
Amt := введите ваше значение ; // 25,12,000
если Amt > 10000000, то RmVal := truncate(Amt/10000000);
если Amt = 10000000, то RmVal := 1;
если RmVal = 1, то
InWords := InWords + ""+ towords(RmVal,0) + " крор"
еще
если RmVal > 1, то InWords := InWords + ""+ towords(RmVal,0) + " crores";
Amt := Amt - Rmval * 10000000;
если Amt > 100000, то RmVal := truncate(Amt/100000);
если Amt = 100000, то RmVal := 1;
если RmVal = 1, то
InWords := InWords + ""+ towords(RmVal,0) + " lakhs"
Еще
Если RmVal > 1, то InWords := InWords + "" + ToWords(RmVal,0) + "Lakhs";
Amt := Amt - Rmval * 100000;
если Amt > 0, то InWords := InWords + "" + towords(truncate(Amt),0);
pAmt := (Amt - усечение(Amt)) * 100;
если pAmt > 0, то
InWords := InWords + " и "+ towords(pAmt,0) + " только paisa"
еще
InWords := InWords + " только";
Прописные буквы(InWords)
Спасибо Дипаку, ваши решения сработали очень хорошо.
я хочу, чтобы код за одну тысячу рупий = एक हजार रुपये подобное
плеси помоги мне
prasad.absoft@gmail.com
5+
Правильно..!! :)
Спасибо..!!
я хочу, чтобы код за одну тысячу рупий = एक हजार रुपये подобное
плеси помоги мне
prasad.absoft@gmail.com
я хочу отобразить сумму в формате языка маратхи
Но когда я печатаю сумму 1 крор в цифрах до слов она показывает 1 крор 1лах
я хочу, чтобы код за одну тысячу рупий = एक हजार रुपये подобное
плеси помоги мне
prasad.absoft@gmail.com
Ваш код работает нормально но он отображает soulution в американской системе а не в индийской системе
Вы можете посмотреть здесь:
http://www.c-sharpcorner.com/Forums/ShowMessages.aspx-что?ThreadID=38232[^]
Удачи вам!
Thnx для первого ответа, было здорово! Но делать это нужно в Crystal Report, а не в side C#.
Эту ссылку, приведу еще пример, который предназначен для создания отчетов Crystal с помощью кода VB.NET для достижения этой цели:
http://www.dotnetspider.com/resources/5462-How-Convert-Rupee-Value-Words-using-VB-NET.aspx
Здесь также есть ссылка на фрагмент кода, который дает функцию SQL (может быть полезно, если вы используете sql server):
http://www.experts-exchange.com/codeSnippetPopup.jsp?csid=95883
Может быть, эти ссылки более полезны.
спасибо Вам за решение.
Улучшенный ответ...
потому что выше ответ не работает на сумму 1 крор...
он показывает только один крор один лакх.. а это неправильно..
вы можете попробовать ниже ответить, сделав некоторые изменения
numbervar RmVal:=0;
numbervar Amt:=0;
numbervar pAmt:=0;
stringvar InWords :="";
Amt := Round({@Total Amount},0);
если Amt > 10000000, то RmVal := truncate(Amt/10000000);
если Amt = 10000000, то RmVal := 1;
если RmVal = 1, то
InWords := InWords + ""+ towords(RmVal,0) + " крор"
еще
если RmVal > 1, то InWords := InWords + ""+ towords(RmVal,0) + " crores";
Amt := Amt - Rmval * 10000000;
если Amt > 100000, то RmVal := truncate(Amt/100000);
если Amt = 100000, то RmVal := 1;
если Amt = 0, то RmVal := 0;
если RmVal >= 1, то
InWords := InWords + ""+ towords(RmVal,0) + " lakhs";
Amt := Amt - Rmval * 100000;
если Amt > 0, то InWords := InWords + "" + towords(truncate(Amt),0);
pAmt := (Amt - усечение(Amt)) * 100;
если pAmt > 0, то
InWords := InWords + " и "+ towords(pAmt,0) + " только paisa"
еще
InWords := InWords + " только";
Прописные буквы(InWords)
function convertAmountToFigures(damount) { var obAmt = damount.split("."); var strIntPart = convertNumberToWords(damount); var strDecPart = ''; if (parseInt(obAmt[1]) > 0) { strDecPart = ' and ' + convertNumberToWords(parseInt(obAmt[1])) + ' Paise'; } document.getElementById('divinwords').innerHTML = "Rupees" + ' ' + strIntPart + ' ' + strDecPart + ' Only.'; return ("Rupees" + ' ' + strIntPart + ' ' + strDecPart + ' Only.'); }
The given code can explain to convert the number to word in crystal report 1) right click on your formula field 2) click edit formula 3) formula workshop window will open 4) left side of the window u have 'report custom functions' 5)right click and select new 6)give the name for function
Function ConvertDigit(MyDigit as string) if Val(MyDigit) = 1 then ConvertDigit = "One" elseif Val(MyDigit) = 2 then ConvertDigit = "Two " elseif Val(MyDigit) = 3 then ConvertDigit = "Three " elseif Val(MyDigit) = 4 then ConvertDigit = "Four " elseif Val(MyDigit) = 5 then ConvertDigit = "Five " elseif Val(MyDigit) = 6 then ConvertDigit = "Six " elseif Val(MyDigit) = 7 then ConvertDigit = "Seven " elseif Val(MyDigit) = 8 then ConvertDigit = "Eight " elseif Val(MyDigit) = 9 then ConvertDigit = "Nine " end if End Function
Function ConvertHundreds(MyNumber as string) Dim Result As String ' Exit if there is nothing to convert. If Val(MyNumber) = 0 Then Exit Function ' Append leading zeros to number. MyNumber = Right("000" & MyNumber, 3) ' Do we have a hundreds place digit to convert? If Left(MyNumber, 1) <> "0" Then Result = ConvertDigit(Left(MyNumber, 1)) & " Hundreds " End If ' Do we have a tens place digit to convert? If Mid(MyNumber, 2, 1) <> "0" Then Result = Result & ConvertTens(Mid(MyNumber, 2)) Else ' If not, then convert the ones place digit. Result = Result & ConvertDigit(Mid(MyNumber, 3)) End If ConvertHundreds = Trim(Result) End Function Function ConvertTens(MyTens as string) Dim Result As String ' Is value between 10 and 19? If Val(Left(MyTens, 1)) = 1 Then if Val(MyTens) = 10 then Result = "Ten" elseif Val(MyTens) = 11 then Result = "Eleven" elseif Val(MyTens) = 12 then Result = "Twelve" elseif Val(MyTens) = 13 then Result = "Thirteen" elseif Val(MyTens) = 14 then Result = "Fourteen" elseif Val(MyTens) = 15 then Result = "Fifteen" elseif Val(MyTens) = 16 then Result = "Sixteen" elseif Val(MyTens) = 17 then Result = "Seventeen" elseif Val(MyTens) = 18 then Result = "Eighteen" elseif Val(MyTens) = 19 then Result = "Nineteen" end if Else if Val(Left(MyTens, 1)) = 2 then Result = "Twenty " elseif Val(Left(MyTens, 1)) = 3 then Result = "Thirty " elseif Val(Left(MyTens, 1)) = 4 then Result = "Forty " elseif Val(Left(MyTens, 1)) = 5 then Result = "Fifty " elseif Val(Left(MyTens, 1)) = 6 then Result = "Sixty " elseif Val(Left(MyTens, 1)) = 7 then Result = "Seventy " elseif Val(Left(MyTens, 1)) = 8 then Result = "Eighty " elseif Val(Left(MyTens, 1)) = 9 then Result = "Ninety " end if Result = Result & ConvertDigit(Right(cstr(MyTens), 1)) end if ConvertTens = Result End Function Function RupeesToWord(MyNumber As string) Dim Temp Dim Rupees, Paisa As String Dim DecimalPlace, iCount Dim Hundreds, Words As String MyNumber = Trim(CStr(MyNumber)) DecimalPlace = InStr(MyNumber, ".") If DecimalPlace > 0 Then Temp = Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2) Paisa = " and " & ConvertTens(Temp) & " Paisa" ' Strip off paisa from remainder to convert. MyNumber = Trim(Left(MyNumber, DecimalPlace - 1)) if Paisa= " and Paisa" then Paisa="" end if End If Dim TM As String ' If MyNumber between Rs.1 To 99 Only. TM = Right(MyNumber, 2) If Len(MyNumber) > 0 And Len(MyNumber) <= 2 Then If Len(TM) = 1 Then Words = ConvertDigit(TM) if Paisa= " and Paisa" then Paisa="" end if RupeesToWord = "Rupees " & Words & Paisa & " Only" Exit Function Else If Len(TM) = 2 Then Words = ConvertTens(TM) if Paisa= " and Paisa" then Paisa="" end if RupeesToWord = "Rupees " & Words & Paisa & " Only" Exit Function End If End If End If Hundreds = ConvertHundreds(Right(MyNumber, 3)) MyNumber = Left(MyNumber, Len(MyNumber) - 3) iCount = 0 Do While MyNumber <> "" 'Strip last two digits Temp = Right(MyNumber, 2) dim str1 as string if iCount = 0 then str1 =" Thousand " elseif iCount = 2 then str1 =" Lakh " elseif iCount =4 then str1 =" Crore " elseif iCount =6 then str1 =" Arab " elseif iCount =8 then str1 =" Kharab " end if If Len(MyNumber) = 1 Then If Trim(Words) = "Thousand" Or _ Trim(Words) = "Lakh Thousand" Or _ Trim(Words) = "Lakh" Or _ Trim(Words) = "Crore" Or _ Trim(Words) = "Crore Lakh Thousand" Or _ Trim(Words) = "Arab Crore Lakh Thousand" Or _ Trim(Words) = "Arab" Or _ Trim(Words) = "Kharab Arab Crore Lakh Thousand" Or _ Trim(Words) = "Kharab" Then Words = ConvertDigit(Temp) & str1 MyNumber = Left(MyNumber, Len(MyNumber) - 1) Else Words = ConvertDigit(Temp) & str1 & Words MyNumber = Left(MyNumber, Len(MyNumber) - 1) End If Else If Trim(Words) = "Thousand" Or _ Trim(Words) = "Lakh Thousand" Or _ Trim(Words) = "Lakh" Or _ Trim(Words) = "Crore" Or _ Trim(Words) = "Crore Lakh Thousand" Or _ Trim(Words) = "Arab Crore Lakh Thousand" Or _ Trim(Words) = "Arab" Then Words = ConvertTens(Temp) & str1 MyNumber = Left(MyNumber, Len(MyNumber) - 2) Else If Trim(ConvertTens(Temp) & str1) = "Lakh" Or _ Trim(ConvertTens(Temp) & str1) = "Crore" Or _ Trim(ConvertTens(Temp) & str1) = "Arab" Then Words = Words MyNumber = Left(MyNumber, Len(MyNumber) - 2) Else Words = ConvertTens(Temp) & str1 & Words MyNumber = Left(MyNumber, Len(MyNumber) - 2) End If End If End If iCount = iCount + 2 Loop if Paisa= " and Paisa" then Paisa="" end if RupeesToWord = "Rupees " & Words & Hundreds & Paisa & " Only" end Function
Плагиат от источник
Превосходно работает
Не работает для меня, я получаю только Rupee Arab Only и Rupee Kharab Kharab only, и написание nt в британском формате. пожалуйста помочь
Формула =
"РС. "+ towords(нумерации(середина(функция cstr({@MTotlAmt}),1,инстр(функция cstr({@MTotlAmt}),".",1)-1)),0) + " и " + ToWords (нумерации(середина(функция cstr({@MTotlAmt}),функция instr(функция cstr({@MTotlAmt}),".",1)+1,лен(функция cstr({@MTotlAmt})))),0) + " Пайс только"
На этот раз с помощью Crystal report
Конвертировать валюту в слова (Индийский формат) в Crystal Reports[^]
function convertNumberToWords(amount) { var junkVal = amount; junkVal = Math.floor(junkVal); var obStr = new String(junkVal); numReversed = obStr.split(""); actnumber = numReversed.reverse(); if (Number(junkVal) >= 0) { } else { alert('wrong Number cannot be converted'); return ''; } if (Number(junkVal) == 0) { return 'Zero'; } if (actnumber.length > 12) { alert('Cannot convert ' + actnumber.length + ' digit number'); return ''; } var iWords = ["Zero", " One", " Two", " Three", " Four", " Five", " Six", " Seven", " Eight", " Nine"]; var ePlace = ['Ten', ' Eleven', ' Twelve', ' Thirteen', ' Fourteen', ' Fifteen', ' Sixteen', ' Seventeen', ' Eighteen', ' Nineteen']; var tensPlace = ['dummy', ' Ten', ' Twenty', ' Thirty', ' Forty', ' Fifty', ' Sixty', ' Seventy', ' Eighty', ' Ninety']; var hundsPlace = ['dummy', ' One Hundred', ' Two Hundred', ' Three Hundred', ' Four Hundred', ' Five Hundred', ' Six Hundred', ' Seven Hundred', ' Eight Hundred', ' Nine Hundred']; var thousPlace = ['dummy', ' One Thousand', ' Two Thousand', ' Three Thousand', ' Four Thousand', ' Five Thousand', ' Six Thousand', ' Seven Thousand', ' Eight Thousand', ' Nine Thousand']; var tensthousPlace = ['dummy', ' Ten Thousand', ' Twenty Thousand', ' Thirty Thousand', ' Forty Thousand', ' Fifty Thousand', ' Sixty Thousand', ' Seventy Thousand', ' Eighty Thousand', ' Ninety Thousand']; var iWordsLength = numReversed.length; var totalWords = ""; var inWords = new Array(); var finalWord = ""; j = 0; for (i = 0; i < iWordsLength; i++) { switch (i) { case 0: if (actnumber[i] == 0 || actnumber[i + 1] == 1) { inWords[j] = ''; } else { inWords[j] = iWords[actnumber[i]]; } inWords[j] = inWords[j]; break; case 1: tens_complication(); break; case 2: if (actnumber[i] == 0) { inWords[j] = ''; } else if (actnumber[i - 1] != 0 && actnumber[i - 2] != 0) { inWords[j] = iWords[actnumber[i]] + ' Hundred '; } else { inWords[j] = iWords[actnumber[i]] + ' Hundred'; } break; case 3: if (actnumber[i] == 0 || actnumber[i + 1] == 1) { inWords[j] = ''; } else { inWords[j] = iWords[actnumber[i]]; } if (actnumber[i + 1] != 0 || actnumber[i] > 0) { inWords[j] = inWords[j] + " Thousand"; } break; case 4: tens_complication(); break; case 5: if (actnumber[i] == 0 || actnumber[i + 1] == 1) { inWords[j] = ''; } else { inWords[j] = iWords[actnumber[i]]; } inWords[j] = inWords[j] + " Lakh"; break; case 6: tens_complication(); break; case 7: if (actnumber[i] == 0 || actnumber[i + 1] == 1) { inWords[j] = ''; } else { inWords[j] = iWords[actnumber[i]]; } inWords[j] = inWords[j] + " Crore"; break; case 8: tens_complication(); break; case 9: if (actnumber[i] == 0 || actnumber[i + 1] == 1) { inWords[j] = ''; } else { inWords[j] = hundsPlace[actnumber[i]]; } break; case 10: if (actnumber[i] == 0 || actnumber[i + 1] == 1) { inWords[j] = ''; } else if (i == iWordsLength-1 && actnumber[i] > 0) { inWords[j] = iWords[actnumber[i]] + ' Thousand'; } else if (actnumber[i + 1] > 0 && actnumber[i] > 0) { inWords[j] = tensPlace[actnumber[i + 1]] + iWords[actnumber[i]] + ' Thousand'; } else { inWords[j] = thousPlace[actnumber[i]]; } break; case 11: if (actnumber[i] == 0 || actnumber[i + 1] == 1) { inWords[j] = ''; } else if (actnumber[i - 1] == 0) { inWords[j] = tensthousPlace[actnumber[i]]; } break; default: break; } j++; } function tens_complication() { if (actnumber[i] == 0) { inWords[j] = ''; } else if (actnumber[i] == 1) { inWords[j] = ePlace[actnumber[i - 1]]; } else { inWords[j] = tensPlace[actnumber[i]]; } } inWords.reverse(); for (i = 0; i < inWords.length; i++) { switch (inWords[i]) { case " Thousand": if (i > 0) { if (inWords[i - 1] != "") finalWord += inWords[i]; } else finalWord += inWords[i]; break; case " Lakh": if (i > 0) { if (inWords[i - 1] != "") finalWord += inWords[i]; } else finalWord += inWords[i]; break; case " Crore": if (i > 0) { if (inWords[i - 1] != "") finalWord += inWords[i]; else finalWord += inWords[i]; } else finalWord += inWords[i]; break; default: finalWord += inWords[i]; break; } } return finalWord; }
numberVar crorecount := Int(Sum({ViewBillInvoice.Total_Price})/10000000) ; //count of crores numberVar lakhcount := Int(Int(Sum({ViewBillInvoice.Total_Price}) - (crorecount*10000000))/100000); //count of lakhs numberVar decimal :=(Sum({ViewBillInvoice.Total_Price}))- Int (Sum({ViewBillInvoice.Total_Price})) ; //decimal part stringvar croreSubStr := iif(crorecount>0,ToWords(crorecount,0)+' crore',''); //string you will add at the final result if number is greater of 10000000 stringvar lakhSubStr := iif(lakhcount>0,ToWords(lakhcount,0)+' lakh',''); //string you will add at the final result if number is greater of 100000 ProperCase (croreSubStr+' '+lakhSubStr+' '+ToWords (Int (Sum({ViewBillInvoice.Total_Price})-(crorecount*10000000)-(lakhcount*100000)),0) + ', and ' + ToWords ((decimal * 100),0) + ' Paise Only')
Необъяснимый дамп кода-это не решение проблемы. Как насчет того, чтобы объяснить, что ваше решение обеспечивает, чего не делают многие другие решения?