黑马程序员技术交流社区
标题:
分享一道入学测试题 金额转换
[打印本页]
作者:
xplcc
时间:
2014-11-2 20:10
标题:
分享一道入学测试题 金额转换
本帖最后由 xplcc 于 2014-11-2 20:14 编辑
/**
* 10、 金额转换,阿拉伯数字转换成中国传统形式。
例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
* @author Administrator
*
*/
public class Test10 {
public static void main(String[] args) {
//方法中的参数为double型
System.out.println(show(101000001010D));
}
/**
*
* @param num 整数部分
* @param decimal 小数部分
* @return
*/
public static String converse(long num, int decimal){
//大写数字数组
String[] upperArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
//整数部分的单位数组
String[] unitArr = {"圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"};
//处理整数部分
//转换成大写后的字符串
String str = "";
//记录0的重复次数
int count = 0;
//数字的位数 从0开始 例如:0表示个位数 1表示十位数
int index = 0;
while(num>0){
//处理不是零的情况
if(num%10!=0){
str = upperArr[(int)(num%10)] + unitArr[index] + str;
//清零 重新记录0的重复次数
count = 0;
//处理是零的情况
}else{
//记录0的重复次数
count++;
//若个位数为0 则添加单位”圆“
if(index==0){
str = unitArr[0];
}
//只对第一次是0的情况进行处理 对再次出现的0不作处理 ;并且不对个位数上出现的0做处理
if(count==1 && index>0){
str = upperArr[0] + str;
}
//当万的4个位数不是0时,添加单位"万"
if(index==4 && num%10000!=0)str = unitArr[4] + str;
//当亿的5个位数不是0时,添加单位"亿"
if(index==8 && num%100000!=0)str = unitArr[8] + str;
}
index++;
//去掉已转换的数字
num = (long)Math.floor(num/10.0);
}
//若小数部分为0 直接返回
if(decimal==0)
return str + "整";
//处理小数部分
String str2 = "";
str2 = upperArr[(int)(decimal/10%10)] + "角"
+ upperArr[(int)(decimal%10)] + "分";
return str + str2;
}
/**
* 将double数据拆成整数和小数部分 然后调用大小写转换方法
* @param d
* @return
*/
public static String show(double d){
long num = (long)Math.floor(d);
int decimal = (int)(d*100-num*100);
return converse(num,decimal);
}
}
复制代码
作者:
齐宁宁
时间:
2014-11-2 20:13
谢谢分享
作者:
OnlyStyle
时间:
2014-11-2 20:39
谢谢分享,楼主好人。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2