如何用JAVA实现数字转换为大写?

这个问题关键点有如下几点:
  1. 我们注意到数字都是可以以4位长为单位分段的,每个段分别对应一个单位(除了第一段外),依次为万、亿等等。
  2. 每个段中又都是以 千、百、十以及各位组成
  3. 在每个分段的最后一位——我称之为临界位,在这个位上又有如下情况:
  • 如果某个分段中的位全为0,那么此时就不要加上段单位,否则,要加上段单位
       4、处理多个0的情况
  • 如果有连续多个0出现,只写一个大写零。
       5、某一段的读写格式为:
            几仟几佰几拾几+段单位,如果段中有多个零出现,那么做相应的处理。
下面为实现代码:(此代码转网上代码)
public class NumToRMB{

public static void main(String[] args){
System.out.println(changeToBig(Double.parseDouble(args[
0])));
}

public static String changeToBig(double value){
char[] hunit={'','',''}; //段内位置表示
char[] vunit={'','亿'}; //段名表示
char[] digit={'','','','','','','','','',''}; //数字表示
long midVal = (long)(value*100); //转化成整形
String valStr=String.valueOf(midVal); //转化成字符串
String head=valStr.substring(0,valStr.length()-2); //取整数部分
String rail=valStr.substring(valStr.length()-2); //取小数部分

String prefix
=""; //整数部分转化的结果
String suffix=""; //小数部分转化的结果
//处理小数点后面的数
if(rail.equals("00")){ //如果小数部分为0
suffix="";
}
else{
suffix
=digit[rail.charAt(0)-'0']+""+digit[rail.charAt(1)-'0']+""; //否则把角分转化出来
}
//处理小数点前面的数
char[] chDig=head.toCharArray(); //把整数部分转化成字符数组
boolean preZero=false; //标志当前位的上一位是否为有效0位(如万位的0对千位无效)
byte zeroSerNum = 0; //连续出现0的次数
for(int i=0;i<chDig.length;i++){ //循环处理每个数字
int idx=(chDig.length-i-1)%4; //取段内位置
int vidx=(chDig.length-i-1)/4; //取段位置
if(chDig[i]=='0'){ //如果当前字符是0
preZero=true;
zeroSerNum
++; //连续0次数递增
if(idx==0 && vidx >0 &&zeroSerNum < 4){
prefix
+= vunit[vidx-1];
preZero
=false; //不管上一位是否为0,置为无效0位
}
}
else{
zeroSerNum
= 0; //连续0次数清零
if(preZero){ //上一位为有效0位
prefix+=digit[0]; //只有在这地方用到'零'
preZero=false;
}
prefix
+=digit[chDig[i]-'0']; //转化该数字表示
if(idx > 0) prefix += hunit[idx-1];
if(idx==0 && vidx>0){
prefix
+=vunit[vidx-1]; //段结束位置应该加上段名如万,亿
}
}
}

if(prefix.length() > 0) prefix += ''; //如果整数部分存在,则有圆的字样
return prefix+suffix; //返回正确表示
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值