高分求助数字金额转化为大写的java源码!如50.20元 自动转化为伍拾点贰圆。急

fuyingch 2003-12-08 01:28:32
高分求助数字金额转化为大写的java源码!如50.20元 自动转化为伍拾点贰圆。急
...全文
27 点赞 收藏 25
写回复
25 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
eureka0891 2003-12-09
sbResult.append(a_strNumber[strInteger.charAt(i) - 48]);//这里为什么要减48

strInteger.charAt(i)取出的是Asc码,所以要-48
48是Asc 码的0
回复
Rangiggs 2003-12-08
up
回复
lu8088 2003-12-08
up
回复
springouting 2003-12-08
good
回复
kjah 2003-12-08
能用!不错!
就一个字:
顶!!!!!!!!!!!
回复
fliedfish 2003-12-08
levitt.liu@je01.com
回复
色老虫 2003-12-08
我是害虫
回复
yupingping 2003-12-08
yujiaping@0451.com
也请给我一份呀
回复
f286 2003-12-08
大侠,程序有一部分没看明白请解释一下

//开始翻译:
StringBuffer sbResult = new StringBuffer();
for(int i=0; i<strInteger.length(); i++) {
sbResult.append(a_strModify[i]);
sbResult.append(a_strNumber[strInteger.charAt(i) - 48]);//这里为什么要减48呢
}

sbResult = sbResult.reverse();
回复
色老虫 2003-12-08
哦,没看下边的,不好意思 ,打搅
回复
junyi2003 2003-12-08
晕,好老的问题,结合位数和数组的问题,简单

呵呵

to killerdanny(月影-月下轻舞剑 酒里怀过往):以后不要轻易贴源码,这样对你我他都不利。能给个思路其实已经很好了,你这样会助长懒虫的诞生
回复
色老虫 2003-12-08
killerdanny(月影-月下轻舞剑 酒里怀过往) 老大,编译说repalce符号不认识啊,我看不出来怎么回事,解说一下吧
回复
色老虫 2003-12-08
我顶~~~~~~~~
回复
killerdanny 2003-12-08
/**
* 功能:用给定字符串pDest替换字符串pValue中的pSource
* @param pValue
* @param pSource
* @param pDest
* @return 经过替换处理的字符串
* 例:pValue= xy ,pSource =x ,pDest = 测试
* 调用改函数后pValue =测试y
*
* 说明一下: 如果 pvalue= xxx pSource = xx 处理结果是 x
* ,这个结果可能与您平时看到的替换函数有点不一样,通常应该是
* pSource =xx.
*
*/
static private void replace(StringBuffer pValue, String pSource, String pDest){
if (pValue == null ||
pSource == null ||
pDest == null)
return ;

int intPos = 0;//记录pSource在pValue中的位置
do{
//---------------------------------------------------
//intPos = pValue.toString().indexOf(pSource,intPos);
//---------------------------------------------------

//============================================
intPos = pValue.toString().indexOf(pSource);
//============================================
if (intPos == -1)//没有找到pSource.
break;
pValue.delete(intPos,intPos + pSource.length());
pValue.insert(intPos,pDest);

//---------------------------------
//intPos += pSource.length();
//---------------------------------
}while(true);
}
//现在发现这样的处理没有什么实际意义。所以我就不写了.
public String ChineseToNumber(String pValue){
return null;
}


public static void main(String[] args) {
//为了方便您看程序运行结果,我将所有方法都设置成静态的

//测试:
System.err.println(10);
System.err.println(NumberToChinese(10));

System.err.println(12);
System.err.println(NumberToChinese(12));

System.err.println(102);
System.err.println(NumberToChinese(102));

System.err.println(1022);
System.err.println(NumberToChinese(1022));

System.err.println(10009);
System.err.println(NumberToChinese(10009));

System.err.println(100000);
System.err.println(NumberToChinese(100000));

System.err.println(1000008);
System.err.println(NumberToChinese(1000008));

System.err.println(10000080);
System.err.println(NumberToChinese(10000080));


System.err.println(1000020300);
System.err.println(NumberToChinese(1000020300));


System.err.println(0.34);
System.err.println(NumberToChinese(0.34));

System.err.println(10.34);
System.err.println(NumberToChinese(10.34));

System.err.println(101.34);
System.err.println(NumberToChinese(101.34));

System.err.println(-101.34);
System.err.println(NumberToChinese(-101.34));

System.err.println(-100100010.33);
System.err.println(NumberToChinese(-100100010.33));


}
}
回复
killerdanny 2003-12-08
//--------------------------------------------------------
我已经测试过很多便了,没问题了!
//--------------------------------------------------------
/**
* 功能:数字 变成 汉字
* 汉字 变成 数字
* -----------------------------------
* 说明: 只能处理1000亿范围内的数据.
* 小数点后面最多保留9位
* -----------------------------------
* 如:
* 123 变成 零佰贰拾叁
* 零佰贰拾叁 变成 123
*
* 需求分析:
* ====================
* 数字到汉字
* ====================
* 数字的组成部分: 1: 符号位: 取值范围 {"正","负"}
* 2: 整数部分
* 3: 小数部分
* 4: 整数部分和小数部分之间的分割符号"."
* A:符号位影射到汉字比较简单 “+”----"正"
* "-" ----"负"
* B:分割符号"."的影射是最简单的了 "." ---"点"
* C:小数部分的影射也很简单,直接"翻译"
* .234 ---点贰叁肆.
* D:整数部分的影射复杂点.
* 整数部分的”翻译“之所以复杂是因为除了要将数字影射到对应的汉字,还
* 要添加一些"修饰词"(我把拾,佰,仟,万,亿称做修饰词).
* 如: 1234123421
* 对应汉字: 1拾2亿3仟4佰1拾2万3仟4佰2拾1.(输汉字好麻烦,所以我没有将
* 数字”翻译“过来.
* 如果你仔细分析一下,你会发现,这样的翻译工作很简单.
* 请从 ”1拾2亿3仟4佰1拾2万3仟4佰2拾1“取出全部修饰符(依次从左往右取)
* 你会发现取出来的修饰符号,会很有规律,看上去一定是这个样子:
* 拾,佰,仟,万,拾,佰,仟,亿,拾,佰,仟
* 实现很简单,请看源代码.
* ---------------------------------------------------------------------------
* ====================
* 汉字到数字
* ====================
* 现在发现这样的处理没有什么实际意义。所以我就不写了.
* ---------------------------------------------------------------------
* @version 1.00
* @author huangyh
* @email huangbin0791@163.com
* @date 2002.10.11
*/
package com.cxlife.convert;
public class Convert {
private final static String[] a_strNumber = {"零","壹","贰","叁","肆",
"伍","陆","柒","捌","玖"};
private final static String[] a_strModify = {"","拾","佰","仟",
"万","拾","佰","仟",
"亿","拾","佰","仟"};

private final static String strSign = "负";//实际上”+“号永远都不可能出现.

private final static String strDot = "点";

/**
* 功能: 提取符号位.
* 说明: 如果输入参数是 "-13.3",调用该函数的返回值是 "负";
* 如果输入参数是 "13.3", 调用该函数的返回值是 ""(空值).
* @param pValue
*
*/
static private String getSign(String pValue){
return pValue.indexOf("-") == 0 ? "负" : "";
}

/**
* 功能:返回小数部分的汉字
* 说明:如果输入数据是 12.35,调用该函数返回值是 叁伍
*
* @param pValue
* @return
*/
static private String getFraction(String pValue){
String strFraction = null;//用来保存小数部分的数字串
int intDotPos = pValue.indexOf(".");
if (intDotPos == -1)//没有小数部分.
return "";
strFraction = pValue.substring(intDotPos +1);
StringBuffer sbResult = new StringBuffer(strFraction.length());
//开始翻译.
for(int i=0; i<strFraction.length(); i++)
sbResult.append(a_strNumber[strFraction.charAt(i) - 48]);
return sbResult.toString();
}

/*
* 功能: 返回整数部分的汉字.
* 如果输入参数是: 234.3,调用该函数的返回值是 贰佰叁拾肆.
* @param pValue
* @return
*/
static private String getInteger(String pValue){
String strInteger = null;//用来保存整数部分数字串
int intDotPos = pValue.indexOf(".");//记录"."所在位置
int intSignPos = pValue.indexOf("-");
if (intDotPos == -1 )
intDotPos = pValue.length();

strInteger = pValue.substring(intSignPos+1, intDotPos);//取出整数部分


//反转整数部分数据
strInteger = new StringBuffer(strInteger).reverse().toString();
//-----------------------------------------------------------
//开始翻译:
StringBuffer sbResult = new StringBuffer();
for(int i=0; i<strInteger.length(); i++) {
sbResult.append(a_strModify[i]);
sbResult.append(a_strNumber[strInteger.charAt(i) - 48]);
}

sbResult = sbResult.reverse();
//这个时候得到的结果不标准,需要调整.
//203返回值是 贰佰零拾三个 正确答案是 贰佰零三

//--------------------------------------------------------------------------
//串调整.
replace(sbResult,"零拾","零");
replace(sbResult,"零佰","零");
replace(sbResult,"零仟","零");
replace(sbResult,"零万","万");
replace(sbResult,"零亿","亿");
//多个”零“调整处理
replace(sbResult,"零零","零");
replace(sbResult,"零零零","零");
replace(sbResult,"零零零零万","");//这两句不能颠倒顺序
replace(sbResult,"零零零零","");

replace(sbResult,"壹拾亿","拾亿");//这样读起来更习惯.
replace(sbResult,"壹拾万","拾万");

//--------------------------------------------------------------------------

if (sbResult.charAt(sbResult.length()-1) == '零'&&
sbResult.length() != 1)//删除个位上的零
sbResult.deleteCharAt(sbResult.length()-1);

if (strInteger.length() == 2){
replace(sbResult,"壹拾","拾");
}

return sbResult.toString();//将结果反转回来.
}

/**
* 功能: 返回分割符号
* 如果参数是"12.3" 调用该函数的返回值是"点"
* 如果参数是"12" 调用该函数的返回值是""(空值)
* @param pValue
* @return
*/
static private String getDot(String pValue){
return pValue.indexOf(".") != -1 ? "点" : "";
}

//数字到汉字
static public String NumberToChinese(double pValue){
//注意:不能用string.valueOf(pValue)处理,你自己试试就知道了.
java.text.DecimalFormat df = new java.text.DecimalFormat("#.#########");
String pTemp = String.valueOf( df.format(pValue));
StringBuffer sbResult = new StringBuffer(getSign(pTemp) + getInteger(pTemp) +
getDot(pTemp) + getFraction(pTemp));
return sbResult.toString();

}

回复
hxy51899 2003-12-08
我这里有一下不是java 的程序。不过拿去改成java的就行了。如果你要我就贴上来,要不得等我有时间改成java的。我现在没时间改。
回复
heshi82215 2003-12-08
我也来凑凑热闹,
heshi_wen@mail.china.com
回复
jscsqb 2003-12-08
用正则表达式吧
回复
haimingway 2003-12-08
如若慷慨,赠我一份
allanpoecn@sina.com
回复
abbelaries 2003-12-08
也给我发一份吧
abbel.dai@scholarbook.com
回复
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2003-12-08 01:28
社区公告
暂无公告