Я работаю над задачей преобразования числа в слова с использованием синтаксиса Crystal Report и Crystal.
Я справился с любой суммой <100K с кодом ниже, но столкнулся с проблемой с суммой> 100K (в валюте VN мы даже конвертируем сотни миллиардов, а не только 10 тысяч или миллионы). Может ли кто-нибудь помочь мне найти способ справиться с этой проблемой, чтобы преобразовать любую сумму в слова.
Заранее благодарю за любую помощь от вас.
//the array value is the wording of number in EN Zero, One, Two, Three...
local stringvar array Array_Items:= ["không","một","hai","ba","bốn","năm","sáu","bẩy","tám","chín"];
local numbervar x;
local numbervar z;
local stringvar strcuaso;
z:=10000;
local numbervar s10k;
local stringvar strs10k;
local numbervar s1k;
local stringvar strs1k;
local stringvar th;
local numbervar stram;
local stringvar strstram;
local numbervar schuc;
local stringvar strschuc;
local numbervar sdonvi;
local stringvar strsdonvi;
local stringvar a;
x:=50031;
strcuaso:=totext(x,2,"");
s10k:=tonumber(left(strcuaso,1));
s1k:=tonumber(mid(strcuaso,2,1));
if((s10k=1)and(s1k=0))then
strs10k:="mười";
if((s10k=1)and(s1k=0))then
strs1k:="nghìn";
if((s10k>1)and(s1k=0))then
strs10k:=totext(Array_Items[s10k+1])+" mươi ";
if((s10k>1)and(s1k=0))then
strs1k:="nghìn";
if((s10k=1)and(s1k>=1))then
strs10k:="mười ";
if((s10k=1)and(s1k>=1))then
strs1k:=totext(Array_Items[s1k+1])+" nghìn ";
if((s10k>1)and(s1k=1))then
strs10k:=totext(Array_Items[s10k+1])+ " mươi ";
if((s10k>1)and(s1k=1))then
strs1k:=" mốt nghìn ";
if(s10k>1)and(s1k>1)then
strs10k:=totext(Array_Items[s10k+1])+ " mươi ";
if(s10k>1)and(s1k>1)then
strs1k:=totext(Array_Items[s1k+1])+" nghìn ";
stram:=tonumber(mid(strcuaso,3,1));
schuc:=tonumber(mid(strcuaso,4,1));
sdonvi:=tonumber(mid(strcuaso,5,1));
strstram:=" "+totext(Array_Items[stram+1])+" trăm ";
if((schuc=0)AND(sdonvi=0))then
th:="A" ;
if((schuc=0)AND(sdonvi>=1))then
th:="B";
if((schuc=1)and(sdonvi>0))then
th:="C1";
if((schuc=1)and(sdonvi=0))then
th:="C2";
if((schuc>1)and(sdonvi=0))then
th:="D";
if((schuc>1)and(sdonvi=1))then
th:="E"; //strsdonvi="mốt";
if((schuc>1)and(sdonvi>1))then
strsdonvi:=totext(Array_Items[sdonvi+1])
th:="F";
if(th="A")then
strschuc:="";
if(th="A")then
strsdonvi:="";
if(th="B")then
strschuc:="";
if(th="B")then
strsdonvi:=" linh " +totext(Array_Items[sdonvi+1]);
if(th="C1")then
strschuc:="mười ";
if(th="C1")then
strsdonvi:=totext(Array_Items[sdonvi+1]);
if(th="C2")then
strschuc:="mười";
if(th="C2")then
strsdonvi:="";
if(th="D")then
strschuc:=totext(Array_Items[schuc+1])+" mươi " ;
if(th="D")then
strsdonvi:="";
if(th="E")then
strschuc:=totext(Array_Items[schuc+1])+" mươi " ;
if(th="E")then
strsdonvi:=" mốt ";
if(th="F")then
strschuc:=totext(Array_Items[schuc+1])+" mươi";
if(th="F")then
strsdonvi:=totext(Array_Items[sdonvi+1]);
if(x=z)then
a:="Mười nghìn VND"
else
a:=ProperCase(strs10k)+strs1k+strstram+strschuc+strsdonvi+" VND ";