黑马程序员技术交流社区
标题:
来大家顶一个,学点知识(人民币数字读法转换成汉字)帮顶
[打印本页]
作者:
zhanghua
时间:
2011-11-15 12:39
标题:
来大家顶一个,学点知识(人民币数字读法转换成汉字)帮顶
本帖最后由 zhanghua 于 2011-11-15 14:08 编辑
这个程序将数字转换成人民币大写的形式
如:1000001
壹佰万零壹元整
public class AmountInWords {
private String result="";
private String[] wordsArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private String[] unitArr={"拾","佰","仟","万","亿"};
/**
* 把一个浮点数分解成整数和小数部分字符串
*/
// private String getDecimalWords(String decimal){
//
// }
/**
* 将特殊位前的零去掉
*/
void throwZero(){
result=result.substring(0, result.length()-1);
}
/**
* 增加单位
*/
void addUnit(int po){
if(po==8){
result+=unitArr[4];
}else if(po==4){
result+=unitArr[3];
}
else if(po==3||po==7){
result+=unitArr[2];
}else if(po==2||po==6){
result+=unitArr[1];
}else if(po==1||po==5){
result+=unitArr[0];
}else if(po==0){
result+="元";
}
}
/**
* 判断在特殊位上前面是否为零
*/
private boolean frontIsZero(int po) {
int len = result.length() - 1;
if (result.charAt(len) == '零') {
return true;
}
return false;
}
private String[] divide(String numStr){
if(numStr.contains(".")){
String[] arr=numStr.split("\\.");
return arr;
}
return new String[]{numStr,""};
}
//负责整的转换,
private String toWords(String numStr){
String[] arr=divide(numStr);
//去掉多余的零
String temp=Integer.parseInt(arr[0])+"";
integerWords(temp);
String decimal=decimalWords(arr[1]);
if(decimal.length()!=0){
result=result+decimal;
}else{
result=result+"整";
}
return result;
}
/**
* 把一个整数数字转换为大写数字
*/
String integerWords(String numStr){
//用作标识出现零的次数是否连续
boolean flag=true;
for(int i=0;i<numStr.length();i++){
int digit=numStr.charAt(i)-48;
int po=numStr.length()-1-i;
//如果不是最后一位数字,而且数字不是零,则需要添加单位
if(i!=numStr.length()-1&&digit!=0){
flag=true;
result+=wordsArr[digit];
addUnit(po);
}else if(po==8){
//判断是否在特殊位置上 应该判断特殊位前边是否为零,如果为零应先载取,再进行增加单位
addUnit(po);
}
else if(po==4){
if(frontIsZero(po)){
throwZero();
}
//去掉零之后,应该将标识设置为true代表已经没有零
flag=true;
addUnit(po);
}
else if(po==0){
//因为前边没有将最后一位添加上去,所以下边将进行添加,而且,已经到了最后一位,如果最后一位前边是零应该截取掉,并且最后一位也不为零
if(digit!=0){
result+=wordsArr[digit];
}
if(frontIsZero(po)){
throwZero();
}
addUnit(po);
}
else {
if(flag){
flag=false;
result+=wordsArr[digit];
}
}
}
return result;
}
String decimalWords(String decimalStr){
String decimalWrods="";
String[] decimalUnit={"角","分"};
for(int i=0;i<decimalStr.length();i++){
int digit=decimalStr.charAt(i)-48;
if(digit==0&&i==0){
decimalWrods="零";
}else{
decimalWrods=decimalWrods+wordsArr[digit]+decimalUnit
;
}
}
return decimalWrods;
}
public static void main(String[] args) {
AmountInWords amount=new AmountInWords();
amount.toWords("1000001");
System.out.println(amount.result);
}
}
作者:
欧阳文愿
时间:
2011-11-18 21:01
这个挺有用,先收藏了,谢谢
作者:
杨杰
时间:
2011-11-19 22:38
这个绝对很有用,必须收藏!!!
作者:
804404980
时间:
2011-11-20 04:34
有才{:soso_e128:}
作者:
laoyang
时间:
2011-11-20 09:53
class num
{
//大写金额
private static char[] NUMBER_CHAR = "零壹贰叁肆伍陆柒捌玖".toCharArray();
//金额单位
private static char[] UNIT_CHAR = "元拾佰仟万拾佰仟亿拾佰仟".toCharArray();
public static String convert(int amount)
{
StringBuffer amountStr = new StringBuffer();
if(amount > 9)
{
//当前位置
int pos = 0;
//当前位置所表示的值
int digit = amount % 10;
//上一位置所表示的值
int preDigit = -1;
while(amount > 0)
{
//如果个位为0的话则只输出单位
if(pos == 0 && digit == 0)
{
amountStr.insert(0, UNIT_CHAR[pos]);
}
else
{
//如果位置为万或者为亿的位置,就算当前位置值为0也要输出
//如12,000,675
if((pos == 4 || pos ==8) && digit == 0)
{
amountStr.insert(0, UNIT_CHAR[pos]);
}
else
{
//如果上一个位置与当前位置的值不同时为0的情况下
//过滤掉重复的0
if(digit != 0 || preDigit != 0)
{
//如果当前位置为0上一个位置不为0的情况下,则只输出数字,不需要单位
if(digit == 0 && preDigit != 0)
{
amountStr.insert(0, NUMBER_CHAR[digit]);
}
else
{
amountStr.insert(0, UNIT_CHAR[pos]);
amountStr.insert(0, NUMBER_CHAR[digit]);
}
}
}
}
amount = amount / 10;
pos++;
preDigit = digit;
digit = amount % 10;
}
return amountStr.toString().replaceAll("亿万", "亿");
}
else
{
return amountStr.append(NUMBER_CHAR[amount]).append(UNIT_CHAR[0]).toString();
}
}
public static void main(String[] args)
{
//备注:在这里就不对参数进行检验,即默认传过来的参数是正确的金额
//Java教程:http://www.javaweb.cc
System.out.println(convert(2223));
System.out.println(convert(100324500));
}
}
作者:
ARMdong
时间:
2012-7-20 22:47
学习了,收藏!!!
作者:
灵感
时间:
2012-7-23 14:43
很实用,很给力
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2