注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

TOTO

Think and Be Different

 
 
 

日志

 
 

将阿拉伯数字转成中文汉字的形式  

2007-01-12 16:44:41|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

将阿拉伯数字转成中文汉字的形式

这个主要是有些语法的问题:

(1)连续多个零的时候,如何判断是零还是多个位的4004或者4000,多个零的翻译结果是不一样的!

(2)单位问题:我本来想用一个循环来解决,结果发现挺费事的,不过还是可以改写的,主要是万,亿,万亿,亿亿,万亿亿,亿亿亿....(其实后面几个已经没有什么实际含义了,太大我们会用科学计数法来记录的!)

下面贴一下代码吧:

// This program can translate 20-digits Number
//
package num2chinese;

public class NumTranslate {
 private final static char[] NumCh = {'零','一','二'
  ,'三','四','五','六','七','八','九'};
 private final static char[] NumUnit = {'个','十',
        '百','千'};
 private final static String[] NumMUnit = {"万","亿",
        "万亿","亿亿"};
 /**
  *
  * @param source Number String ,you can
  *  transform a number to a String
  *   by Integer.toString() or Using BigDecimal
  * @return a String of the translated Number!
  */
 public static String NumTranslateFunc(String source) {
  String result = new String();
  int size = source.length();
  int level = (size / 4) ;  //单位的等级, NumMUnit[]
  int left = (size % 4) ;   //四位数,中未处理的个数
  int ZeroTimes = 0;        // 用来记录四位数里面0的个数
  int i = 0;
  if(left == 0) { 
   // 特殊情况的调整!对于可以正好整除4的整数,那么left=0,
   // level 比合适的值多1
   left = 4;
   level--;
  }
   while(i < size) {
   for(; left >= 1; left--, i++)
   {
    if(source.charAt(i) == '0') {
     ZeroTimes++;
     while((left - 1) >= 1 && source.charAt(i+1) == '0') {
      ZeroTimes++;
      i++;
      left--;
      }
//     没有到四位数的最后一位的时候,要加单位,
     if(left != 1) {   
      result = result +  NumCh[source.charAt(i)-'0'];
      if(source.charAt(i) != '0')
       result += NumUnit[left - 1];
     }
    }
    else {
     result = result +  NumCh[source.charAt(i)-'0'];
//      这个判断主要针对个位数而言的,否则就会多一个“个”
     if(left != 1) { 
      result += NumUnit[left - 1];
     }
    }
   }
   //    4位数不都为零,且不是最后一层的时候,加单位
   if(ZeroTimes != 4 && level >= 1) {
    
    result += NumMUnit[level - 1];
   }
   left = 4;
   ZeroTimes = 0;
   level--;
  }
  return result;
 }
 public static void main(String[] args) {
  String test;
  test = NumTranslateFunc("123456789000");
  System.out.println(test);
 }
}

  评论这张
 
阅读(545)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017