前段时间问过一次,有人给了我几段代码,不过都有问题,如100000000就转成了壹亿零千万零百万...... 还有就是10100000这种中间没有百万的或千万的,下面的JAVASCRIPT的代码我有的函数看不懂,不会改,哪位朋友能帮我改成DELPHI的,这个有个小BUG,一亿会转成“壹亿万元整”,多了个万字,谁能帮我改掉就更好了,分不够再加代码如下:
<SCRIPT LANGUAGE="JavaScript">
<!--function Arabia_to_Chinese(Num){
for(i=Num.length-1;i>=0;i--)
{
Num = Num.replace(",","")//替换tomoney()中的“,”
Num = Num.replace(" ","")//替换tomoney()中的空格
}
Num = Num.replace("¥","")//替换掉可能出现的¥字符
if(isNaN(Num)) { //验证输入的字符是否为数字
alert("请检查小写金额是否正确");
return;
}
//---字符处理完毕,开始转换,转换采用前后两部分分别转换---//
part = String(Num).split(".");
newchar = "";
//小数点前进行转化
for(i=part[0].length-1;i>=0;i--){
if(part[0].length > 10){ alert("位数过大,无法计算");return "";}//若数量超过拾亿单位,提示
tmpnewchar = ""
perchar = part[0].charAt(i);
switch(perchar){
case "0": tmpnewchar="零" + tmpnewchar ;break;
case "1": tmpnewchar="壹" + tmpnewchar ;break;
case "2": tmpnewchar="贰" + tmpnewchar ;break;
case "3": tmpnewchar="叁" + tmpnewchar ;break;
case "4": tmpnewchar="肆" + tmpnewchar ;break;
case "5": tmpnewchar="伍" + tmpnewchar ;break;
case "6": tmpnewchar="陆" + tmpnewchar ;break;
case "7": tmpnewchar="柒" + tmpnewchar ;break;
case "8": tmpnewchar="捌" + tmpnewchar ;break;
case "9": tmpnewchar="玖" + tmpnewchar ;break;
}
switch(part[0].length-i-1){
case 0: tmpnewchar = tmpnewchar +"元" ;break;
case 1: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
case 2: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
case 3: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
case 4: tmpnewchar= tmpnewchar +"万" ;break;
case 5: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
case 6: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
case 7: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
case 8: tmpnewchar= tmpnewchar +"亿" ;break;
case 9: tmpnewchar= tmpnewchar +"拾" ;break;
}
newchar = tmpnewchar + newchar;
}
//小数点之后进行转化
if(Num.indexOf(".")!=-1){
if(part[1].length > 2) {
alert("小数点之后只能保留两位,系统将自动截段");
part[1] = part[1].substr(0,2)
}
for(i=0;i<part[1].length;i++){
tmpnewchar = ""
perchar = part[1].charAt(i)
switch(perchar){
case "0": tmpnewchar="零" + tmpnewchar ;break;
case "1": tmpnewchar="壹" + tmpnewchar ;break;
case "2": tmpnewchar="贰" + tmpnewchar ;break;
case "3": tmpnewchar="叁" + tmpnewchar ;break;
case "4": tmpnewchar="肆" + tmpnewchar ;break;
case "5": tmpnewchar="伍" + tmpnewchar ;break;
case "6": tmpnewchar="陆" + tmpnewchar ;break;
case "7": tmpnewchar="柒" + tmpnewchar ;break;
case "8": tmpnewchar="捌" + tmpnewchar ;break;
case "9": tmpnewchar="玖" + tmpnewchar ;break;
}
if(i==0)tmpnewchar =tmpnewchar + "角";
if(i==1)tmpnewchar = tmpnewchar + "分";
newchar = newchar + tmpnewchar;
}
}
//替换所有无用汉字
while(newchar.search("零零") != -1)
newchar = newchar.replace("零零", "零");
newchar = newchar.replace("零亿", "亿");
newchar = newchar.replace("亿万", "亿");
newchar = newchar.replace("零万", "万");
newchar = newchar.replace("零元", "元");
newchar = newchar.replace("零角", "");
newchar = newchar.replace("零分", ""); if (newchar.charAt(newchar.length-1) == "元" || newchar.charAt(newchar.length-1) == "角")
newchar = newchar+"整"
// return newchar;
document.frm.num2.value=newchar;
}//-->
</SCRIPT>
各位大哥大姐帮帮忙啊
<SCRIPT LANGUAGE="JavaScript">
<!--function Arabia_to_Chinese(Num){
for(i=Num.length-1;i>=0;i--)
{
Num = Num.replace(",","")//替换tomoney()中的“,”
Num = Num.replace(" ","")//替换tomoney()中的空格
}
Num = Num.replace("¥","")//替换掉可能出现的¥字符
if(isNaN(Num)) { //验证输入的字符是否为数字
alert("请检查小写金额是否正确");
return;
}
//---字符处理完毕,开始转换,转换采用前后两部分分别转换---//
part = String(Num).split(".");
newchar = "";
//小数点前进行转化
for(i=part[0].length-1;i>=0;i--){
if(part[0].length > 10){ alert("位数过大,无法计算");return "";}//若数量超过拾亿单位,提示
tmpnewchar = ""
perchar = part[0].charAt(i);
switch(perchar){
case "0": tmpnewchar="零" + tmpnewchar ;break;
case "1": tmpnewchar="壹" + tmpnewchar ;break;
case "2": tmpnewchar="贰" + tmpnewchar ;break;
case "3": tmpnewchar="叁" + tmpnewchar ;break;
case "4": tmpnewchar="肆" + tmpnewchar ;break;
case "5": tmpnewchar="伍" + tmpnewchar ;break;
case "6": tmpnewchar="陆" + tmpnewchar ;break;
case "7": tmpnewchar="柒" + tmpnewchar ;break;
case "8": tmpnewchar="捌" + tmpnewchar ;break;
case "9": tmpnewchar="玖" + tmpnewchar ;break;
}
switch(part[0].length-i-1){
case 0: tmpnewchar = tmpnewchar +"元" ;break;
case 1: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
case 2: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
case 3: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
case 4: tmpnewchar= tmpnewchar +"万" ;break;
case 5: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
case 6: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
case 7: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
case 8: tmpnewchar= tmpnewchar +"亿" ;break;
case 9: tmpnewchar= tmpnewchar +"拾" ;break;
}
newchar = tmpnewchar + newchar;
}
//小数点之后进行转化
if(Num.indexOf(".")!=-1){
if(part[1].length > 2) {
alert("小数点之后只能保留两位,系统将自动截段");
part[1] = part[1].substr(0,2)
}
for(i=0;i<part[1].length;i++){
tmpnewchar = ""
perchar = part[1].charAt(i)
switch(perchar){
case "0": tmpnewchar="零" + tmpnewchar ;break;
case "1": tmpnewchar="壹" + tmpnewchar ;break;
case "2": tmpnewchar="贰" + tmpnewchar ;break;
case "3": tmpnewchar="叁" + tmpnewchar ;break;
case "4": tmpnewchar="肆" + tmpnewchar ;break;
case "5": tmpnewchar="伍" + tmpnewchar ;break;
case "6": tmpnewchar="陆" + tmpnewchar ;break;
case "7": tmpnewchar="柒" + tmpnewchar ;break;
case "8": tmpnewchar="捌" + tmpnewchar ;break;
case "9": tmpnewchar="玖" + tmpnewchar ;break;
}
if(i==0)tmpnewchar =tmpnewchar + "角";
if(i==1)tmpnewchar = tmpnewchar + "分";
newchar = newchar + tmpnewchar;
}
}
//替换所有无用汉字
while(newchar.search("零零") != -1)
newchar = newchar.replace("零零", "零");
newchar = newchar.replace("零亿", "亿");
newchar = newchar.replace("亿万", "亿");
newchar = newchar.replace("零万", "万");
newchar = newchar.replace("零元", "元");
newchar = newchar.replace("零角", "");
newchar = newchar.replace("零分", ""); if (newchar.charAt(newchar.length-1) == "元" || newchar.charAt(newchar.length-1) == "角")
newchar = newchar+"整"
// return newchar;
document.frm.num2.value=newchar;
}//-->
</SCRIPT>
各位大哥大姐帮帮忙啊
解决方案 »
- 两个dbgrideh间行的移动
- 求控件安装密码 infopower4000pro_vcl6
- 安装完expressbars,运行时,提示没有发现designinfo.dcu?回答立刻给分。
- COBRA OBJECT 为何我无处新建!
- 小问题:如何取得ADOQuery的查询返回结果集,如何判断结果为空?/代码如下:
- 紧急时期,请大家看一下我的作品,喜欢的帮忙投一票!
- FasteReport4 没有数据时也显示header内容
- 奇怪,请教各位:哪里有Delphi的安装文件下载啊?怎么找不到呢?
- 股票分析软件助手
- 各位大侠,看看我这光驱怎么了。急!
- 关于查询日期的问题。
- 请问在哪里可以下载到Delphi7.0?一定是可以下载的,否则没分!先到先得!!!
const
BigNumber='零壹贰叁肆伍陆柒捌玖';
BigUnit='万仟佰拾亿仟佰拾万仟佰拾元'; {共可表示13位金额}
var
nLeft, nRight, lTemp, rTemp, BigNumber1, BigUnit1: string;
I: Integer;
begin
{取整数和小数部分}
RMB:=FormatCurr('0.00', StrToFloat(RMB));//确保数字小数后有两位数字
nLeft:=copy(RMB, 1, Pos('.', RMB) - 1);
nRight:=copy(RMB, Pos('.', RMB) + 1, 2);
{转换整数部分}
for I:=1 to Length(nLeft) do
begin
BigNumber1:=copy(BigNumber, StrToInt(nLeft[I]) * 2 + 1, 2);
BigUnit1:=copy(BigUnit, (Trunc(Length(BigUnit) / 2) - Length(nleft) + I - 1) * 2 + 1, 2);
if (BigNumber1='零') and ((copy(lTemp, Length(lTemp)- 1, 2))='零')then
lTemp:=copy(lTemp, 1, Length(lTemp) - 2);
if (BigNumber1='零') and ((BigUnit1='亿') or (BigUnit1='万') or (BigUnit1='元')) then
begin
BigNumber1:=BigUnit1;
if BigUnit1<>'元' then BigUnit1:='零' else BigUnit1:='';
end;
if (BigNumber1='零') and (BigUnit1<>'亿') and (BigUnit1<>'万') and (BigUnit1<>'元') then BigUnit1:='';
lTemp:=lTemp + BigNumber1 + BigUnit1;
end;
if Pos('亿万', lTemp)<>0 then Delete(lTemp, Pos('亿万', lTemp) + 2, 2); {转换小数部分}
if StrToInt(nRight[1])<>0 then
rTemp:=copy(BigNumber, StrToInt(nRight[1]) * 2 + 1, 2) + '角';
if StrToInt(nRight[2])<>0 then
begin
if StrToInt(nRight[1])=0 then rTemp:='零';
rTemp:=rTemp + copy(BigNumber, StrToInt(nRight[2]) * 2 + 1, 2) + '分';
end; Result:=lTemp + rTemp ;
if lTemp = '元' then Result := rTemp ;
end;
var
tmpStr: string;
begin
SetLength(tmpStr, 255);
GetCurrencyFormat(LOCALE_SYSTEM_DEFAULT, 0, number, nil, PChar(tmpStr), Length(tmpStr));
Result := tmpStr;
end;//example
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.MessageBox(PChar(GetCurrency(PChar(Edit1.Text))), '', MB_OK);
end;
function SmallNumToChar(NumStr: String): String;
const
BigChar:array[0..9] of String=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
BigPerChar:array[0..3] of String=('','拾','佰','仟');
var
rl,l,i:Integer;
begin
Result:='';
l:=Length(NumStr);
for i:=0 to l-1 do
begin
if NumStr[i]<>'0' then
begin
Result:=Result+BigChar[StrToInt(NumStr[i+1])]
end
else
begin
if (NumStr[i+1]<>'0') then
begin
Result:=Result+BigChar[StrToInt(NumStr[i+1])]
end
end;
if (NumStr[i+1]<>'0') then Result:=Result+BigPerChar[l-i-1];
end;
rl:=Length(Result);
if Copy(Result,rl-1,2)=BigChar[0] then Result:=Copy(Result,1,rl-2);
end;const
BigPerChar:array[0..1] of String=('万','亿');
var
l:Integer;
begin
Result:='';
NumStr:=Trim(NumStr)+'.';
NumStr:=Copy(NumStr,1,Pos('.',NumStr)-1);
if NumStr<>'' then
begin
l:=Length(NumStr);
if l>8 then
begin
Result:=SmallNumToChar(Copy(NumStr,1,l-8))+BigPerChar[1];
NumStr:=Copy(NumStr,l-8+1,8);
l:=8;
end;
if l>4 then
begin
Result:=Result+SmallNumToChar(Copy(NumStr,1,l-4))+BigPerChar[0];
NumStr:=Copy(NumStr,l-4+1,4);
l:=4;
end;
Result:=Result+SmallNumToChar(Copy(NumStr,1,l));
end;end;
function Arabia_to_Chinese(Num:string):string;
var i:integer;
h,l,s,t:string;
begin
result:='';
for i:=length(num) downto 1 do
if (num[i]=',') or (num[i]=#163) then
num:=copy(num,1,i-1)+copy(num,i+2,length(num)-i);
try
strtofloat(num);
except
showmessage('转化错误!非数字');
exit;
end;
i:=pos('.',num);
if i>0 then begin
h:=copy(num,1,i-1);
l:=copy(num,i+1,2);
end
else
begin
h:=num;
l:='0';
end; if length(h)>10 then
begin
showmessage('太大!');
exit;
end;
s:=''; for i:=1 to length(h) do
begin
t:=copy(num,i,length(num)-i+1);
case t[1] of
'0': s:=s+ '零';
'1': s:=s+ '一';
'2': s:=s+ '二';
'3': s:=s+ '三';
'4': s:=s+ '四';
'5': s:=s+ '五';
'6': s:=s+ '六';
'7': s:=s+ '七';
'8': s:=s+ '八';
'9': s:=s+ '九';
end;
case length(t) of
1: s:= s +'元';
2: s:= s +'十';
3: s:= s +'佰';
4: s:= s +'仟';
5: s:= s +'万';
6: s:= s +'十';
7: s:= s +'百';
8: s:= s +'千';
9: s:= s +'亿';
10: s:= s +'十';
end;
end;
for i:=1 to length(l) do
begin
t:=copy(l,i,length(l)-i+1);
case t[1] of
'0': s:=s+ '零';
'1': s:=s+ '一';
'2': s:=s+ '二';
'3': s:=s+ '三';
'4': s:=s+ '四';
'5': s:=s+ '五';
'6': s:=s+ '六';
'7': s:=s+ '七';
'8': s:=s+ '八';
'9': s:=s+ '九';
end;
case length(t) of
0: s:= s +'';
1: s:= s +'分';
2: s:= s +'角';
end;
end;
result:=s;
end;
=====================================================反正无聊
showmessage(Arabia_to_Chinese('¥123,454.789'))
非常感谢你为我翻译这段代码,不过没有最后那段也不行哦,转换结果就是我开头说的情况啊