package cn.wyu.gui;
import java.io.*;
public class Num2Chinese {
private String number[]={"","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String unit[]={"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰"};
private String small[]={"角","分"};
private String strNumber,strUnit,strAll;
private String onlyInt(int intInt)
{
String strInt;
strInt=String.valueOf(intInt);
strNumber="";strUnit="";strAll="";
int l=strInt.length();
int j,k,zeorCount;
zeorCount=0;
for (k=0;k<l;k++)
{
String strTemp=strInt.substring(k,k+1);
int intTemp=Integer.parseInt(strTemp);
strNumber=number[intTemp];
j=l-1-k;
strUnit=unit[j];
if (intTemp==0)
{
if (zeorCount==0)
{
strUnit=strUnit.replace('拾','零');
strUnit=strUnit.replace('佰','零');
strUnit=strUnit.replace('仟','零');
strUnit=strUnit.replace('万','零');
}
else
{
strUnit=strUnit.replaceAll("拾","");
strUnit=strUnit.replaceAll("佰","");
strUnit=strUnit.replaceAll("仟","");
strUnit=strUnit.replaceAll("万","");
}
zeorCount++;
}
strAll+=strNumber+strUnit;
}
return strAll;
}
private String onlySmall(int intSmall)
{
strNumber="";strUnit="";strAll="";
String strSmall,strTemp;
strSmall=String.valueOf(intSmall);
int i;
if (intSmall>=10)
{
for (i=0;i<strSmall.length();i++)
{
strTemp=String.valueOf(intSmall).substring(i,i+1);
if (Integer.parseInt(strTemp)!=0)
{
strNumber=number[Integer.parseInt(strTemp)];
strUnit=small[i];
strAll+=strNumber+strUnit;
}
}
}
else
{
if (intSmall!=0)
{
strNumber=number[intSmall];
strUnit=small[1];
strAll+=strNumber+strUnit;
}
}
return strAll;
}
public String getChineseMoney(double number)
{
//四舍五入
number=(number*100+0.5)/100;
String strAll,strChineseInt,strChineseSmall,strZheng;;
int intInt,intSmall;
strChineseInt="";strChineseSmall="";strZheng="";
//整数部分
intInt=(int)( number*100/100);
if (intInt!=0)
{
strChineseInt=onlyInt(intInt);
}
//小数部分
double temp=(number-intInt)*100*100/100;
//对小数部分四舍五入
intSmall=(int)(temp*100+0.5)/100;
if (intSmall!=0)
{
strChineseSmall=onlySmall(intSmall);
}
else
{
strZheng="整";
}
strAll=strChineseInt+strChineseSmall+strZheng;
return strAll;
}
public static void main(String args[]) throws IOException
{
Num2Chinese cm=new Num2Chinese();
double money;
String strMoney,strChineseMoney;
strMoney="";
//读取
System.out.println("输入货币(四舍五入):");
BufferedReader cin = new BufferedReader(new InputStreamReader( System.in));
strMoney = cin.readLine();
money=Double.parseDouble(strMoney);
strChineseMoney=cm.getChineseMoney(money);
System.out.println(strChineseMoney);
}
}
----------------------------------以上为程序一,存在bug?--------------------------------------------------
package cn.wyu.gui;
import java.math.BigDecimal;
import org.omg.CORBA.TRANSIENT;
/**
*
* @author toflyhigh
* 2008-06
*
*/
public class Num2Chinese2 {
private static String bigLetter[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆",
"柒", "捌", "玖" };
private static String unit[] = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟",
"亿", "拾", "佰", "仟", "万" };
private static String unitSmall[] = { "分", "角" };
/**
*
* @param args
*/
public static void main(String[] args) {
String[] testStrs = { "1234567888888.100"/* 大十进制数 */,
"1001"/* 没有小数,且含相邻的两个零 */, "101005.1"/*零在单位所处的位置*/, "1010"/*零在元位*/ };
System.out.println(new BigDecimal(testStrs[2]).toString());
System.out.println(trans(testStrs[2]));
}
public static String trans(String str) {
BigDecimal dec = check2BigDecimal(str);
if (dec == null)
return null;
str = dec.toPlainString();
String[] sArr = str.split("\\.");
String intOnly = sArr[0];
String smallOnly = "";
if (sArr.length == 2)
smallOnly = sArr[1];
if (smallOnly.length() > 2) {
smallOnly = smallOnly.substring(0, 2);
}
return transInt(intOnly) + transSmall(smallOnly);
}
public static String transInt(String str) {
if ("0".equals(str))
return "";
StringBuffer newS = new StringBuffer();
char[] cArr = str.toCharArray();
for (int i = 0; i < cArr.length; i++) {
String u = unit[cArr.length - i - 1];
int position = "元万亿".indexOf(u);
// 遇到零,特殊处理
if (cArr[i] == '0') {
// 如果零在特殊位置上:比如个位,万位,亿位
if (position >= 0) {
// 如果零在个位:需要加上单位“元”
if (position == 0) {
newS.append(unit[cArr.length - i - 1]);
continue;
} else {// 如果零不在个位
// 零不在个位,且这个位后,紧跟着一个零:只需要加上单位
if (i < cArr.length - 1 && cArr[i + 1] == '0') {
newS.append(unit[cArr.length - i - 1]);
continue;
} else {// 零不在个位,且这个位后,没有紧跟着一个零:需要加上单位和大写数字(注意次序:单位在前,大写数字在后)
newS.append(unit[cArr.length - i - 1]);
newS.append(bigLetter[cArr[i] - 48]);
continue;
}
}
} else {// 零不在特殊位置上
// 零不在特殊位置上,且这个位后,紧跟着一个零:忽略这个零
if (i < cArr.length - 1 && cArr[i + 1] == '0') {
continue;
}
// 零不在特殊位置上,且这个位后,没有紧跟着一个零:需要加上大写数字
newS.append(bigLetter[cArr[i] - 48]);
continue;
}
}
// 不是零,常规处理
newS.append(bigLetter[cArr[i] - 48]);
newS.append(unit[cArr.length - i - 1]);
}
return newS.toString();
}
public static String transSmall(String str) {
//因为最多精确到分,所有str的长度最多位2
if (str == null || "".equals(str))
return "";
char[] cArr = str.toCharArray();
if (str.indexOf("0") == -1) {//不含有零,常规处理
StringBuffer newS = new StringBuffer();
for (int i = 0; i < cArr.length; i++) {
newS.append(bigLetter[cArr[i] - 48]);
newS.append(unitSmall[cArr.length - i - 1]);
}
return newS.toString();
} else {//含有零,分情况考虑
if (cArr[0] == '0' && cArr[cArr.length == 2 ? 1 : 0] == '0')//两个都为零
return "";
if (cArr[0] == '0' && cArr.length == 2 && cArr[1] != '0')//角位为零,分位不为零
return bigLetter[0] + bigLetter[cArr[1] - 48] + unitSmall[0];
if (cArr[0] != '0' && cArr.length == 2 && cArr[1] == '0')//分位为零,角位不为零
return bigLetter[cArr[0] - 48] + unitSmall[1];
}
return "";
}
public static BigDecimal check2BigDecimal(String str) {
try {
double f = Double.valueOf(str);// 0.0 0.1 -5 ""
if (f < 0)
System.out.println("输入数据小于0,请检查!");
return new BigDecimal(f);
} catch (NumberFormatException e) {
e.printStackTrace();
}
return null;
}
}
----------------------------------------------该程序经过测试,完好-----------------------------------------------