java 人民币转换_java人民币读法转换

实现浮点数转换成人民币读法字符串

编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006.333转换为壹千零陆元叁角叁分。

题意分析:

这4位数字若出现在1~4位,则后面添加‘元’,若出现在5~8位,则添加‘万’,若出现在9~12位,则添加‘亿’。

超过12位以后,暂不考虑,实际上,超过12位数后,double类型存储溢出,会造成数据的错误。

代码编译分析:

将double型的浮点数减去long型的整数部分即可得到浮点数的小数部分,由于只需取两位则乘以100,再用

Math.round函数取整得到小数部分。用“zheng+”“ ”或"String.valueOf(xiao)"将整数转换为字符串。

位的字符串,并使原字符串更新为除去后4位以后的字符串。

特殊情况分析:

转换。

1 package 人民币读法; 2 3 import java.util.Arrays; 4 import java.util.Scanner; 5 6 // 编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006.333转换为壹千零陆元叁角叁分 7 // D:\疯狂Java讲义\codes\04\4.6 NUM2RMB 8 9 public class Rmb { 10 private String[] str1 = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; 11 private String[] str2 = {"十","百","千"}; 12 private String[] str3 = {"角","分"}; 13 private String[] str4 = {"元","万","亿"}; 14 // 把浮点数分解成整数部分字符串 15 private String divadeZheng(double num) 16 { 17 long zheng = (long)num; 18 // 整型转换成字符串 19 return zheng + ""; 20 } 21 // 把浮点数分解成小数部分字符串 22 private String divadeXiao(double num) 23 { 24 long zheng = (long)num; 25 // 得到浮点数的小数部分 26 long xiao = Math.round((num-zheng)*100); 27 // 用方法把整型转换成字符串 28 return String.valueOf(xiao); 29 } 30 31 // 把小数部分的数字字符串转换成汉字字符串 32 private String toStr1(String xiao) 33 { 34 String re1 = ""; 35 int len = xiao.length(); 36 if(len==2) 37 { 38 for(int i = 0;i<2;i++) 39 { 40 // 把字符串转换成数字 41 int num = xiao.charAt(i) - 48; 42 // 数字不为零则需要加单位,为零则不操作 43 if(num!=0) 44 { 45 re1 += str1[num] + str3[i]; 46 } 47 } 48 } 49 // 若长度为1,例:12.09小数部分为9 50 if(len==1&&xiao.charAt(0)!='0') 51 { 52 int num = xiao.charAt(0) - 48; 53 // 此时只有分,加单位str3【1】 54 re1 +=str1[num] + str3[1]; 55 } 56 return re1; 57 } 58 59 // 把一个四位的数字字符串变成汉字字符串 60 private String toStr(String zheng) 61 { 62 String re = "" ; 63 int j = 0; 64 int lenz = zheng.length(); 65 // 特殊情况如输入0.89时,整数字符串为0的处理 66 if(zheng.charAt(0)=='0'&&lenz==1) 67 { 68 re +="零"; 69 return re; 70 } 71 // 遍历每一位数字 72 for(int i =0;i=9) 103 n = 3; 104 else if(len>=5) 105 n = 2; 106 else if(len>=1) 107 n = 1; 108 // 若位数非4的倍数,则在前面补0,直到位数为4的倍数为止 109 // 如 12,2345补为0012,2345 110 if(len%4!=0) 111 { 112 String zh = ""; 113 int s = len%4; 114 // 在前面补0 115 for(int k=0;k=0;j--) 137 { 138 m =(int) ((Zheng.charAt(j)-48)*Math.pow(10, 3-j)); 139 me += m; 140 } 141 // 把数字12装换成字符串12 142 Zheng = String.valueOf(me); 143 // 把字符串12换成 壹拾贰 144 sss = this.toStr(Zheng); 145 // 衔接上 元 等单位,再加上已经转换好的 汉字字符串 ,此处注意每组字符串间的顺序 146 sss += str4[i]+Re; 147 Re = sss; 148 } 149 return Re; 150 } 151 152 // 主方法,输入金额,并将整数部分和小数部分联接 153 public static void main(String[] args) { 154 // TODO Auto-generated method stub 155 Rmb s = new Rmb(); 156 System.out.println("请输入整数部分为十二位以内的金额:"); 157 Scanner in = new Scanner(System.in); 158 double a = in.nextDouble(); 159 System.out.println("人民币读法为:"); 160 // 将整数部分的汉字字符串和小数部分的汉字字符串联接 161 System.out.println(s.zhengDivade(s.divadeZheng(a))+s.toStr1(s.divadeXiao(a))); 162 } 163 164 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值