阿拉伯数字转中文大写用JS怎么转?
在网上只找到这个
但我转不来。。
<%
int count=0;
int i_index;
String cashnum= "13528.26 ";
String cashup= " ";
aaa class1 = new aaa();
for (int i =0;i < cashnum.length();i++)
{
if (cashnum.substring(i,i+1).compareTo( ". ")==0)
{
i_index=cashnum.lastIndexOf( ". ");
String num1=cashnum.substring(0,i_index);
cashup=class1.change(num1);
String num2=cashnum.substring(i_index+1);
if (num2.length()==1) num2=num2+ "0 ";
cashup=cashup+class1.change2(num2);
break;
}
else
count=count+1;
}
if (count==cashnum.length())
cashup=class1.change(cashnum)+ "整 ";
out.println(cashup);
%>
<%!
public class aaa{
String[] subdw={ "圆 ", "拾 ", "佰 ", "仟 ", "万 "};
String[] subdw2={ "分 ", "角 "};
String[][] subup={{ "0 ", "零 "},{ "1 ", "壹 "},{ "2 ", "贰 "},{ "3 ", "叁 "},{ "4 ", "肆 "},{ "5 ", "伍 "},{ "6 ", "陆 "},{ "7 ", "柒 "},{ "8 ", "捌 "},{ "9 ", "玖 "}};
public String change(String str)
{
String str_return= " ";
int lenstr=str.length();
for(int i=0;i <lenstr;i++)
{
char location=str.charAt(i);
for (int j=0;j <10;j++)
{
if (subup[j][0]==subup[(int)location-48][0])
str_return+=subup[j][1];
}
str_return=str_return+subdw[lenstr-i-1];
//lenstr=lenstr-1;
}
return(str_return);
}
public String change2(String str)
{
String str_return= " ";
int lenstr=str.length();
for(int i=0;i <lenstr;i++)
{
char location=str.charAt(i);
for (int j=0;j <10;j++)
{
if (subup[j][0]==subup[(int)location-48][0])
str_return+=subup[j][1];
}
str_return=str_return+subdw2[lenstr-i-1];
//lenstr=lenstr-1;
}
return(str_return);
}
}
%>
[解决办法]
更新版,欢迎大家继续测试:
<script language= "javascript ">
function i2c(n){
if(typeof(n) == "number "){
if(-1 == n.toString().indexOf( ". ")){
return seti2c(n);
}else{
var i,istr,f,fstr,a,rstr;
a = n.toString().split( ". ");
i = a[0];
f = a[1];
istr = seti2c(i);
fstr = setf2c(f);
rstr = istr+ "零 "+fstr;
rstr = rstr.replace(/零+/g, "零 ");
return rstr;
}
}else{
return "--- ";
}
}
function seti2c(n){
var ns = n.toString();
var tempstr = " ";
for(var i=1;i <ns.length+1;i++){
switch(i){
case 1:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "圆 "+tempstr;
}else{
tempstr = "圆 "+tempstr;
}
break;
case 2:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "拾 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
case 3:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "佰 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
case 4:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "仟 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
case 5:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "万 "+tempstr;
}else{
tempstr = "万 "+tempstr;
}
break;
case 6:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "拾 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
case 7:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "佰 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
case 8:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "仟 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
case 9:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "亿 "+tempstr;
}else{
tempstr = "亿 "+tempstr;
}
break;
case 10:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "拾 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
case 11:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "佰 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
case 12:
var t = ns.substr(ns.length-i,1);
if(t!= "0 "){
tempstr = t+ "仟 "+tempstr;
}else{
tempstr = "0 "+tempstr;
}
break;
default:break;
}
}
return g2b(tempstr);
}
function setf2c(n){
var ns = n.toString();
var tempstr = " ";
for(var i=0;i <ns.length;i++){
switch(i){
case 0:
var t = ns.substr(i,1);
if(t!= "0 "){
tempstr += t+ "角 ";
}else{
tempstr += "0 ";
}
break;
case 1:
var t = ns.substr(i,1);
if(t!= "0 "){
tempstr += t+ "分 ";
}
break;
default:break;
}
}
return g2b(tempstr);
}
function g2b(s){
rs = s.replace(/0+/g, "0 ");
rs = rs.replace( "0圆 ", "圆 ");
rs = rs.replace( "0亿 ", "亿 ");
rs = rs.replace( "0万 ", "万 ");
rs = rs.replace( "亿万 ", "亿 ");
rs = rs.replace(/0/g, "零 ");
rs = rs.replace(/1/g, "壹 ");
rs = rs.replace(/2/g, "贰 ");
rs = rs.replace(/3/g, "叁 ");
rs = rs.replace(/4/g, "肆 ");
rs = rs.replace(/5/g, "伍 ");
rs = rs.replace(/6/g, "陆 ");
rs = rs.replace(/7/g, "柒 ");
rs = rs.replace(/8/g, "捌 ");
rs = rs.replace(/9/g, "玖 ");
return rs;
}
document.write(i2c(2334210001.04));
</script>
[解决办法]
测试时又发现点小bug, 顺便把replace正则做了下简化, 口黑口黑
<script>
function DX(n) {
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))
return "数据非法 ";
var unit = "千百拾亿千百拾万千百拾元角分 ", str = " ";
n += "00 ";
var p = n.indexOf( '. ');
if (p > = 0)
n = n.substring(0, p) + n.substr(p + 1, 2);
unit = unit.substr(unit.length - n.length);
for (var i=0; i < n.length; i++)
str += '零壹贰叁肆伍陆柒捌玖 '.charAt(n.charAt(i)) + unit.charAt(i);
return str.replace(/零(千|百|拾|角)/g, "零 ")
.replace(/(零)+/g, "零 ")
.replace(/零(万|亿|元)/g, "$1 ")
.replace(/(亿)万|壹(拾)/g, "$1$2 ")
.replace(/^元零?|零分/g, " ")
.replace(/元$/g, "元整 ");
}
alert(DX( "01123.03 "));
alert(DX(101000102304.1));
alert(DX(102014.1));
alert(DX(0.1));
</script>