java中阿拉伯数字转中文大写

去相关银行业务的公司遇到的机试题常见的有两个,一个是写一个简单的存取款过程,另一个就是输入阿拉伯数字转大写了。

对于存取款过程需要明白其业务逻辑,大致是先登录,登录成功后可以存取款,取款的时候判断金额大小。顺带一提,这里应该还有一个转账的问题,需要先判定转账的账户是否存在,再判断自己的金额是否不足,这里就不写了。

对于第二个问题,那天同学也问了一句,闲暇时顺便也写了一下,代码如下:

package com.test;
/**
 * @author sxycw
 *  

简单的数字转大写

*

这样的逻辑也可以用枚举实现

*/ public class NumberToCN { //自定义字符 private static final String ling = "零"; private static final String[] zheng = {"圆","整"}; //定义大写中文数组 private static final String[] cnArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; //自定义单位数组 private static final String[] danwei = {"", "拾", "佰", "仟" , "万" ,"拾" , "佰" ,"仟" , "亿" }; private static final String[] units = {"角","分"}; //自定义转换方法 public static String convert(String str){//168.789 String xiaoshu = null;//小数 String zhengshu = null;//整数 String result = null;//拼接结果 if(str!=null && str!=""){ //转换double double d1 = Double.parseDouble(str);//168.789 if(d1 > 0){ //四舍五入保留两位小数 String s1 = String.format("%.2f", d1);//168.79 //整数小数分离 String[] arr = s1.split("[.]");//["168","79"] for (int i = 0; i < arr.length; i++) { if(i<1){ zhengshu = arr[i]; }else{ xiaoshu = arr[i]; } } //处理小数 String xiaoshu1 = null ; if("00".equals(xiaoshu)){ //输入的为一个整数时 xiaoshu = zheng[1];//圆整 }else{ for (int i=0;i>>小数部分---"+xiaoshu); //处理整数 String zhengshu1 = ""; if(zhengshu.length()>13){ return "输入的数字过大!"; }else{ for (int i = 0; i < zhengshu.length(); i++) { if("零".equals(charToCn(zhengshu.charAt(i)))){ //为0省略单位 zhengshu1+="零"; }else{ zhengshu1 += charToCn(zhengshu.charAt(i))+ danwei[zhengshu.length()-1-i];//壹佰陆拾捌 } } zhengshu = zhengshu1+zheng[0];//壹佰陆拾捌圆 } System.out.println(">>>整数部分---"+zhengshu); //拼接结果 result = zhengshu + xiaoshu; System.out.println(">>>拼接结果---"+result); }else{ return "输入的数字不合法!"; } return result; }else{ return "请输入一个数字"; } } //char转整int,再转String public static String charToCn(char c){ String result = null; int c1 = Integer.parseInt(String.valueOf(c)); for (int i = 0; i < cnArr.length; i++) { if(i == c1){ result = cnArr[i]; } } return result; } public static void main(String[] args) { //初始化输入值 String str = "168.789"; convert(str); } }

注意!这个代码还有一些问题,如100008的时候需要省根据0的个数省略相关的"零",还需要对单位万进行二次判断,这里先记下来,待完善。

-end-

你可能感兴趣的:(java中阿拉伯数字转中文大写)