您的位置:首页 > 编程语言 > Java开发

疯狂Java练习题 将浮点数转换成人民币读法字符串

2013-11-13 22:10 337 查看
这题有个问题求大神(如果看到的话)解答,可以编译成功,但运行时报出异常


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:0 at Num2Rmb.main

import java.io.*;
/**
* Description:
* <br/>Program Name:将浮点数转换成人民币读法字符串
* <br/>Date:2013/11/13
* @author Peter Pan
* @version 1.0
*/

public class Num2Rmb
{
private String [] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" , "伍" , "陆" , "柒" , "捌" , "玖"};
//如果需要输入大于六位则需要在unitArr后继续加“百万”等
private String [] unitArr = {"分" , "角" , "元" , "十" , "百" , "千" , "万" , "拾万"};

/**
* 把一个小于六位的数字字符串变成汉字字符串
* @param s1,s2 需要被转换的数字字符串
* @return 数字字符串被转换成的汉字字符串。
*/
private String tohanStr(String s1, String s2)
{
String result = "";

//依次遍历整数位数字字符串的每一位数字
for(int i = 0; i < s1.length() && s1 != null; i++)
{
//把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48
//因此把char型数字减去48得到int型数字
int choice = s1.charAt(i) - 48;
result += hanArr[choice] + unitArr[2 + s1.length() -i];
}
//依次遍历小数位数字字符串的每一位数字
for(int j = 0; j < s2.length() && s2 != null; j++)
{
int choice = s2.charAt(j) - 48;
result += hanArr[choice] + unitArr[2 - s2.length()-j];
}

return result;
}

public static void main(String[] args) throws IOException
{

System.out.println("请输入需要转换的数字(小数点最多两位):");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(str);

// 把一个浮点数分解成整数部分和小数部分字符串
String [] postr = str.split(".");
String head = postr[0];
String tail = postr[1];

Num2Rmb n2b;
n2b = new Num2Rmb();
System.out.println("转换后的结果为:" + n2b.tohanStr(head, tail));

br.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: