方法比较多,随便写个 public static char todx(char c) { return "壹贰叁肆伍陆柒捌玖拾".toCharArray()["一二三四五六七八九十".indexOf(c)]; }
public static String ConvertNumberToChinese(String money) { String[] Nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; String S = ""; //返回值 String x=money.replaceAll(",","").replaceAll(" ",""); if(x.startsWith("0")&&(!x.startsWith("0."))) x=x.replaceFirst("0",""); int dot=-1; String intString,dotString; if (x.startsWith("0.")||x.startsWith(".")) S="零圆"+ConvertDotNumberToChinese(x.substring(x.indexOf(".")+1,x.length())); else { dot=x.indexOf("."); if (dot>-1) { intString=x.substring(0,dot); dotString=x.substring(dot+1,x.length() ); S=ConvertIntNumberToChinese(intString)+"圆"+ConvertDotNumberToChinese(dotString); } else { S=ConvertIntNumberToChinese(money)+"圆整"; } } return S; } private static String ConvertDotNumberToChinese(String money) { String[] Nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; String S = ""; //返回值 String x=money.replaceAll(",","").replaceAll(" ",""); int dot=-1; int i=0; if (money.length()==1) { // System.out.println( money.substring(dot+1,1)); S=S+ Nums[Integer.parseInt(money.substring(0,1))]+"角"+"零分"; } if(money.length()>=2) S=S+ Nums[Integer.parseInt(money.substring(0,1))]+"角"+Nums[Integer.parseInt(money.substring(1,2))]+"分"; return S; } private static String ConvertIntNumberToChinese(String money) { String[] Nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; //位 数组 String[] Digits = new String[] {"", "拾", "佰", "仟"}; //单位 数组 String[] Units = new String[] {"", "[万]", "[亿]", "[万亿]"}; String S = ""; //返回值 if (money==null) return ""; String x=money.replaceAll(",","").replaceAll(" ",""); if(money.length()<=0) return ""; int p = 0; //字符位置指针 int m = x.length() % 4; //取模
// 四位一组得到组数 int k = (m > 0 ? x.length() / 4 + 1 : x.length() / 4);
// 外层循环在所有组中循环 // 从左到右 高位到低位 四位一组 逐组处理 // 每组最后加上一个单位: "[万亿]","[亿]","[万]" for (int i = k; i > 0; i--) { int L = 4; if (i == k && m != 0) { L = m; } // 得到一组四位数 最高位组有可能不足四位 String s = x.substring(p, p + L); int l = s.length();
// 内层循环在该组中的每一位数上循环 从左到右 高位到低位 for (int j = 0; j < l; j++) { //处理改组中的每一位数加上所在位: "仟","佰","拾",""(个) int n = java.lang.Integer.parseInt(s.substring(j, j+1)); if (n == 0) { if ((j < l - 1) && (java.lang.Integer.parseInt(s.substring(j + 1, j + 1+ 1)) > 0) //后一位(右低) && !S.endsWith(Nums[n])) { S += Nums[n]; } } else { //处理 1013 一千零"十三", 1113 一千一百"一十三" if (!(n == 1 && (S.endsWith(Nums[0]) | S.length() == 0) && j == l - 2)) { S += Nums[n]; } S += Digits[l - j - 1]; } } p += L; // 每组最后加上一个单位: [万],[亿] 等 if (i < k) //不是最高位的一组 { if (java.lang.Integer.parseInt(s) != 0) { //如果所有 4 位不全是 0 则加上单位 [万],[亿] 等 S += Units[i - 1]; } } else { //处理最高位的一组,最后必须加上单位 S += Units[i - 1]; } } return S; }
太专业了。写出来也许能挣大钱,因为它有能力操纵印钞机, 就是不要出现 new Money () 死循环,免得被淹死。
package numberChange; public class NumberChange { private String [] upperString ={"","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; private String[]unitString={"","十","百","千","万","十","百","千","亿","十"}; private int numberInt = 0; public void setN(String input){//String change to int int temp = Integer.parseInt(input); if(temp >=0&&temp<=2147483647 ){//正整数最大部分 numberInt = temp;
showN("阿拉伯数字为: ",input); } else System.out.println("超出范围"); } public void changeN(){ int temp = numberInt; int x =0, i=0; String result =""; boolean isZero = true,isWan=false; if(temp==0&&i==0){ showN("大写数字","零"); return; } do{ x=temp%10; temp=temp/10; if(i==4&&isWan==true){ if(numberInt>=100000&&numberInt<1000000000) result ="万"+result; else result ="亿"+result; }
if(x!=0){ result = upperString[x]+unitString[i]+result; if(i==0){ isZero = false;}
} else if(x==0){ if(isZero==false){ result ="零"+result; isZero = true;isWan=true;} else result = upperString[x]+result;
} i++;
}while(temp!=0); showN("大写数字",result);
} public void showN(String a,String b){ System.out.println(a+" "+b); } public static void main(String[] args) { NumberChange nC = new NumberChange(); nC.setN("1231"); nC.changeN();
public static char todx(char c) {
return "壹贰叁肆伍陆柒捌玖拾".toCharArray()["一二三四五六七八九十".indexOf(c)];
}
{
String[] Nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String S = ""; //返回值
String x=money.replaceAll(",","").replaceAll(" ","");
if(x.startsWith("0")&&(!x.startsWith("0.")))
x=x.replaceFirst("0","");
int dot=-1;
String intString,dotString;
if (x.startsWith("0.")||x.startsWith("."))
S="零圆"+ConvertDotNumberToChinese(x.substring(x.indexOf(".")+1,x.length()));
else
{
dot=x.indexOf(".");
if (dot>-1)
{
intString=x.substring(0,dot);
dotString=x.substring(dot+1,x.length() );
S=ConvertIntNumberToChinese(intString)+"圆"+ConvertDotNumberToChinese(dotString);
}
else
{
S=ConvertIntNumberToChinese(money)+"圆整";
}
}
return S;
} private static String ConvertDotNumberToChinese(String money)
{
String[] Nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String S = ""; //返回值
String x=money.replaceAll(",","").replaceAll(" ","");
int dot=-1;
int i=0;
if (money.length()==1)
{
// System.out.println( money.substring(dot+1,1));
S=S+ Nums[Integer.parseInt(money.substring(0,1))]+"角"+"零分";
}
if(money.length()>=2)
S=S+ Nums[Integer.parseInt(money.substring(0,1))]+"角"+Nums[Integer.parseInt(money.substring(1,2))]+"分"; return S;
}
private static String ConvertIntNumberToChinese(String money)
{
String[] Nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
//位 数组
String[] Digits = new String[] {"", "拾", "佰", "仟"};
//单位 数组
String[] Units = new String[] {"", "[万]", "[亿]", "[万亿]"};
String S = ""; //返回值
if (money==null) return "";
String x=money.replaceAll(",","").replaceAll(" ","");
if(money.length()<=0) return "";
int p = 0; //字符位置指针
int m = x.length() % 4; //取模
// 四位一组得到组数
int k = (m > 0 ? x.length() / 4 + 1 : x.length() / 4);
// 外层循环在所有组中循环
// 从左到右 高位到低位 四位一组 逐组处理
// 每组最后加上一个单位: "[万亿]","[亿]","[万]"
for (int i = k; i > 0; i--)
{
int L = 4;
if (i == k && m != 0)
{
L = m;
}
// 得到一组四位数 最高位组有可能不足四位
String s = x.substring(p, p + L);
int l = s.length();
// 内层循环在该组中的每一位数上循环 从左到右 高位到低位
for (int j = 0; j < l; j++)
{
//处理改组中的每一位数加上所在位: "仟","佰","拾",""(个)
int n = java.lang.Integer.parseInt(s.substring(j, j+1));
if (n == 0)
{
if ((j < l - 1)
&& (java.lang.Integer.parseInt(s.substring(j + 1, j + 1+ 1)) > 0) //后一位(右低)
&& !S.endsWith(Nums[n]))
{
S += Nums[n];
}
}
else
{
//处理 1013 一千零"十三", 1113 一千一百"一十三"
if (!(n == 1 && (S.endsWith(Nums[0]) | S.length() == 0) && j == l - 2))
{
S += Nums[n];
}
S += Digits[l - j - 1];
}
}
p += L;
// 每组最后加上一个单位: [万],[亿] 等
if (i < k) //不是最高位的一组
{
if (java.lang.Integer.parseInt(s) != 0)
{
//如果所有 4 位不全是 0 则加上单位 [万],[亿] 等
S += Units[i - 1];
}
}
else
{
//处理最高位的一组,最后必须加上单位
S += Units[i - 1];
}
}
return S;
}
就是不要出现 new Money () 死循环,免得被淹死。
package numberChange;
public class NumberChange {
private String [] upperString ={"","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[]unitString={"","十","百","千","万","十","百","千","亿","十"};
private int numberInt = 0;
public void setN(String input){//String change to int
int temp = Integer.parseInt(input);
if(temp >=0&&temp<=2147483647 ){//正整数最大部分
numberInt = temp;
showN("阿拉伯数字为: ",input);
}
else
System.out.println("超出范围");
}
public void changeN(){
int temp = numberInt;
int x =0, i=0;
String result ="";
boolean isZero = true,isWan=false;
if(temp==0&&i==0){
showN("大写数字","零");
return;
}
do{
x=temp%10;
temp=temp/10;
if(i==4&&isWan==true){
if(numberInt>=100000&&numberInt<1000000000)
result ="万"+result;
else
result ="亿"+result;
}
if(x!=0){
result = upperString[x]+unitString[i]+result;
if(i==0){
isZero = false;}
}
else if(x==0){
if(isZero==false){
result ="零"+result; isZero = true;isWan=true;}
else
result = upperString[x]+result;
}
i++;
}while(temp!=0);
showN("大写数字",result);
}
public void showN(String a,String b){
System.out.println(a+" "+b);
} public static void main(String[] args) {
NumberChange nC = new NumberChange();
nC.setN("1231");
nC.changeN();
}
}
我建了个QQ高级群:2869593,里面专门讨论JAVA,希望你能加入!
谢谢啊!
真诚希望你的加盟!非常感谢!
让我们一起交流编程技术!
我替广大热爱编程爱好者感谢你了!
return "壹贰叁肆伍陆柒捌玖拾".toCharArray()["一二三四五六七八九十".indexOf(c)];
}这个很牛。学习
/**
*
* <p>Title: 人民币转成大写</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: www.fqf.com.cn</p>
* @author 范庆丰
* @version 1.0
*/
public class changeToBig {
public changeToBig() {
}
public String hangeToBig(double value){
char[] hunit={'拾','佰','仟'}; //段内位置表示
char[] vunit={'万','亿'}; //段名表示
char[] digit={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; //数字表示
long midVal = (long)(value*100); //转化成整形
String valStr=String.valueOf(midVal); //转化成字符串 String head=valStr.substring(0,valStr.length()-2); //取整数部分
String rail=valStr.substring(valStr.length()-2); //取小数部分 String prefix=""; //整数部分转化的结果
String suffix=""; //小数部分转化的结果
//处理小数点后面的数
if(rail.equals("00")){ //如果小数部分为0
suffix="整";
} else{
suffix=digit[rail.charAt(0)-'0']+"角"+digit[rail.charAt(1)-'0']+"分"; //否则把角分转化出来
}
//处理小数点前面的数
char[] chDig=head.toCharArray(); //把整数部分转化成字符数组
char zero='0'; //标志'0'表示出现过0
byte zeroSerNum = 0; //连续出现0的次数
for(int i=0;i<chDig.length;i++){ //循环处理每个数字
int idx=(chDig.length-i-1)%4; //取段内位置
int vidx=(chDig.length-i-1)/4; //取段位置
if(chDig[i]=='0'){ //如果当前字符是0
zeroSerNum++; //连续0次数递增
if(zero == '0'){ //标志
zero=digit[0];
} else if(idx==0 && vidx >0 &&zeroSerNum < 4){
prefix += vunit[vidx-1];
zero='0';
}
continue;
}
zeroSerNum = 0; //连续0次数清零
if(zero != '0') { //如果标志不为0,则加上,例如万,亿什么的
prefix+=zero;
zero='0';
}
prefix+=digit[chDig[i]-'0']; //转化该数字表示
if(idx > 0) prefix += hunit[idx-1];
if(idx==0 && vidx>0){
prefix+=vunit[vidx-1]; //段结束位置应该加上段名如万,亿
}
} if(prefix.length() > 0) prefix += '圆'; //如果整数部分存在,则有圆的字样
return prefix+suffix; //返回正确表示
}
public static void main(String args[]){
changeToBig a=new changeToBig();
System.out.print(a.hangeToBig(12));
}
}
以下是我的函数
/**
* 文字列变换用
* @param str 要变换的文字列
* @param srcStr 源文字列
* @param destStr 目的文字列
* @return 变换后的文字列
*/
public static String strChange(String str, String srcStr, String destStr)
{
if (str == null)
{
return null;
}
str = str.trim();
if (str.length() == 0)
{
return str;
}
StringBuffer result = new StringBuffer();
String one = null;
int index;
for (int i = 0; i < str.length(); i++)
{
one = str.substring(i, i + 1);
index = srcStr.indexOf(one);
if (index >= 0)
{
one = destStr.substring(index, index + 1);
}
result.append(one);
}
return result.toString();
}调用方法 strChange("要变换的文字列", "一二三四五六七八九十", "壹贰叁肆伍陆柒捌玖拾");
一楼只不过是提供一些思路,不完善!