我的大致思路是将传入的数字每四位隔开按从高到低分别放入一个变量中(这个变量是String比较方便),然后每个变量分别转换成汉字(这些汉字最高肯定只有千数级别),彼此间再用一些单位(如万、亿)来衔接。代码(java)如下://number为传入的数字 public String numberToWord2(int number){String[] unit1={"","十","百","千"};String[] unit2={"","万","亿"};String[] numbers={"零","一","二","三","四","五","六","七","八","九"};if(number==0){return "零";}String sign=new String(number<0?"负":"");if(number<0){number=-number;}//存储最后结果StringBuilder result=new StringBuilder(sign);//将数字每四位划分为一组List<String> divisors=new ArrayList<String>();int remainder=number;int quantity=0;while(remainder>=10000){divisors.add(String.valueOf(remainder/10000));remainder=remainder%10000;quantity++;}divisors.add(String.valueOf(remainder));quantity++;//存储每一组转化后的汉字List<String> finalValues=new ArrayList<String>();for(int k=0;k<quantity;k++){StringBuilder finalValue=new StringBuilder();String divisor(k);int length=divisor.length();char[] numberCharArrayCharArray();for(int i=0;i<length;i++){//获得当前这一组的当前数字所在位数int digNum=length-i;int num=numberCharArray[i]-'0';if(num==0){//若有多个连续的“零”,实际情况只读一个“零”if(!String().endsWith("零")){finalValue.append(numbers[num]);}}else{//没有0,则按正常情况加数字对应的的汉字及单位finalValue.append(numbers[num]).append(unit1[digNum-1]);}}//放在末尾的“零”是不读的while(finalValue.length()>0&&String().endsWith("零")){finalValue.deleteCharAt(finalValue.length()-1);}finalValues.String());}//按照上述同样的逻辑,在不同汉字组之间加单位(“”,“万”,“亿”)衔接int length2=finalValues.size();for(int j=0;j<length2;j++){result.(j)).append(unit2[length2-j-1]);if(j<length2-1&&!"".(j+1))&&!(j+1).contains("千")){result.append("零");}}String(); }
个人觉得这些代码还有待优化,若大家有其他思路欢迎讨论
本文发布于:2024-01-31 13:16:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170667817328792.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |