JAVA将阿拉伯数字的金额转换成中国传统形式
2012-10-23 21:45
316 查看
public class MoneyChange {
public static void main(String[] args) {
System.out.println(change(1001011));
}
/**
* 将阿拉伯金钱表示转换成中国传统表现形式
*
* @param d 传入一个double类型的数值
*
* @return 返回一个中国传统钱币表现形式的字符串
*/
public static String change(double d) {
// 要使用查表法,所以先定义每位上数字对应的中文大写和每位处的单位
// 由于中国人读数字的习惯是4位一节(几千几百几十几),后面再跟上 万,亿等单位所以
// 在写单位表时玩后面用拾佰千, 在这里最好是定义成字符串类型数字,这样可以减少下面代码的转换步骤
String[] hanArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String[] unitArr = { "分", "角", "元", "拾", "佰", "千", "万", "拾", "佰", "千",
"亿" };
// 由于要精确到分,所以把原数乘以100舍掉小数点两位以后的数字转换成long类型
// 如果转换成int类型则数据在大概佰万处就会出错,因为int只有4个字节而double有8个字节
// 需要将其强转成同样是8个字节的long类型,这样才能保证数据不丢失。
// 另外需要注意所输入数字的范围因为我们把小数点向右移动了两位,输入100我们处理后就变成了10000
long zheng = (long) (d * 100);
String str = String.valueOf(zheng);
// 将字符串转化成字符数组 。此处也可以通过遍历将字符串转换成int[]这样就可以避免了后面的强转避开了一些容易忽略的地方
//int[] it = new int[str.length()];
// for(int i = 0;i<str.length;i++){
// it[i]=(Integer.parseInt)(str[i]);
// }
char[] chr = str.toCharArray();
String ss = "";
for (int i = 0; i < chr.length; i++) {
// 将字符数组中的元素强转成int类型,因为他们的ASCii码值相差48所以要减去48,例如1在ASCii中对应的值是49
// 这一点一下子不太容易想到、容易忽略
int x = (int) chr[i] - 48;
// zheng的第i位对应unitArr中的索引为chr.length - i - 1个元素
int y = chr.length - i - 1;
ss += hanArr[x] + unitArr[y];
}
// 使用字符串的replaceAll方法结合正则表达式来将字符串转化成为符合中国人阅读习惯的字符串
return ss.replaceAll("零[拾佰千]", "零").replaceAll("零+万", "万")
.replaceAll("零+元", "元").replaceAll("零+角", "")
.replaceAll("零+分", "").replaceAll("零+", "零");
// return ss; 不能直接returnss,因为使用字符串的replaceAll方法返回的是
// 一个新的字符串而原来的字符串ss并没有改变
}
}
本文出自 “JAVA征途” 博客,请务必保留此出处http://zhangzhiyong.blog.51cto.com/6098541/1034864
public static void main(String[] args) {
System.out.println(change(1001011));
}
/**
* 将阿拉伯金钱表示转换成中国传统表现形式
*
* @param d 传入一个double类型的数值
*
* @return 返回一个中国传统钱币表现形式的字符串
*/
public static String change(double d) {
// 要使用查表法,所以先定义每位上数字对应的中文大写和每位处的单位
// 由于中国人读数字的习惯是4位一节(几千几百几十几),后面再跟上 万,亿等单位所以
// 在写单位表时玩后面用拾佰千, 在这里最好是定义成字符串类型数字,这样可以减少下面代码的转换步骤
String[] hanArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String[] unitArr = { "分", "角", "元", "拾", "佰", "千", "万", "拾", "佰", "千",
"亿" };
// 由于要精确到分,所以把原数乘以100舍掉小数点两位以后的数字转换成long类型
// 如果转换成int类型则数据在大概佰万处就会出错,因为int只有4个字节而double有8个字节
// 需要将其强转成同样是8个字节的long类型,这样才能保证数据不丢失。
// 另外需要注意所输入数字的范围因为我们把小数点向右移动了两位,输入100我们处理后就变成了10000
long zheng = (long) (d * 100);
String str = String.valueOf(zheng);
// 将字符串转化成字符数组 。此处也可以通过遍历将字符串转换成int[]这样就可以避免了后面的强转避开了一些容易忽略的地方
//int[] it = new int[str.length()];
// for(int i = 0;i<str.length;i++){
// it[i]=(Integer.parseInt)(str[i]);
// }
char[] chr = str.toCharArray();
String ss = "";
for (int i = 0; i < chr.length; i++) {
// 将字符数组中的元素强转成int类型,因为他们的ASCii码值相差48所以要减去48,例如1在ASCii中对应的值是49
// 这一点一下子不太容易想到、容易忽略
int x = (int) chr[i] - 48;
// zheng的第i位对应unitArr中的索引为chr.length - i - 1个元素
int y = chr.length - i - 1;
ss += hanArr[x] + unitArr[y];
}
// 使用字符串的replaceAll方法结合正则表达式来将字符串转化成为符合中国人阅读习惯的字符串
return ss.replaceAll("零[拾佰千]", "零").replaceAll("零+万", "万")
.replaceAll("零+元", "元").replaceAll("零+角", "")
.replaceAll("零+分", "").replaceAll("零+", "零");
// return ss; 不能直接returnss,因为使用字符串的replaceAll方法返回的是
// 一个新的字符串而原来的字符串ss并没有改变
}
}
本文出自 “JAVA征途” 博客,请务必保留此出处http://zhangzhiyong.blog.51cto.com/6098541/1034864
相关文章推荐
- 【JAVA编程题】金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
- 金额转换,阿拉伯数字的金额转换成中国传统的形式
- 金额转换,阿拉伯数字的金额转换成中国传统的形式
- 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出
- 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
- 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出
- 金额转换,阿拉伯数字的金额转换为中国传统的形式。例如:327328.96 -> 叁拾贰万柒仟叁佰贰拾捌元玖角陆分。
- 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出
- 金额转换,阿拉伯数字转换成中国传统形式。
- 怎么实现金额转换,将阿拉伯数字金额转换成中国传统形式,例如1011变成一千零一拾一元整?
- 金额转换,阿拉伯数字的金额转换成中国传统大写汉字的形式
- 金额转换,阿拉伯数字转换成中国传统形式。
- [第一天]金额转换,阿拉伯数字的金额转换成中国传统的形式如
- 金额转换,阿拉伯数字转换成中国传统形式。 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
- 金额转换,阿拉伯数字转换成中国传统形式。
- 阿拉伯数字的金额转换成中国传统的形式
- 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-(一千零一拾一元整)输出。
- 怎么实现金额转换,将阿拉伯数字金额转换成中国传统形式,例如1011变成一千零一拾一元整?
- 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一 千零一拾一元整)输出
- 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。