金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
public class RenMinBi { private static final char[] data = new char[]{ '零','壹','贰','叁','肆','伍','陆','柒','捌','玖' }; private static final char[] units = new char[]{ '元','拾','佰','仟','万','拾','佰','仟','亿' }; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println( convert(135689123)); } public static String convert(int money) { StringBuffer sb = new StringBuffer(); int unit = 0; while(money!=0) { sb.insert(0,units[unit++]); System.out.println(sb); int number = money%10;//求最后一位数 System.out.println("number:"+number); sb.insert(0, data[number]); System.out.println(sb); money /= 10;//去掉数值的后一位 System.out.println("money:"+money); } return sb.toString(); } }
为了能够说明整个问题,在程序里面加入了一些打印的信息,从打印的信息里面就非常清楚的说明了程序的执行流程和原理:
元
number:3
叁元
money:13568912
拾叁元
number:2
贰拾叁元
money:1356891
佰贰拾叁元
number:1
壹佰贰拾叁元
money:135689
仟壹佰贰拾叁元
number:9
玖仟壹佰贰拾叁元
money:13568
万玖仟壹佰贰拾叁元
number:8
捌万玖仟壹佰贰拾叁元
money:1356
拾捌万玖仟壹佰贰拾叁元
number:6
陆拾捌万玖仟壹佰贰拾叁元
money:135
佰陆拾捌万玖仟壹佰贰拾叁元
number:5
伍佰陆拾捌万玖仟壹佰贰拾叁元
money:13
仟伍佰陆拾捌万玖仟壹佰贰拾叁元
number:3
叁仟伍佰陆拾捌万玖仟壹佰贰拾叁元
money:1
亿叁仟伍佰陆拾捌万玖仟壹佰贰拾叁元
number:1
壹亿叁仟伍佰陆拾捌万玖仟壹佰贰拾叁元
money:0
壹亿叁仟伍佰陆拾捌万玖仟壹佰贰拾叁元
感觉这种处理的方式和之前在Android上计算文件大小时用到的处理文件大小的思路是一样的,都是采用了除以某个数的形式:
private static String formatFileSize(long filesize) { DecimalFormat df = new DecimalFormat("#.##"); if (filesize >= 1024d * 1024d * 0.8d) return df.format(filesize / (1024d * 1024d)) + "M"; else if (filesize >= 1024d * 0.8d) return df.format(filesize / 1024d) + "K"; else if (filesize == 0) return df.format(filesize) + "Byte"; return df.format(filesize) + "Bytes"; }