中秋节哪儿也别去了,在家省钱!悲剧吧。
看到一个问题:指定一个浮点型的数字,把他转化为人民币大写,表面上看很简单,要做起来还是有点复杂的。
我把这个问题简化了一下:我直接指定一个字符串格式的数字,然后转化为int型,换句话说我不考虑小数的情况,其实加上小数很简单,就不多说了。
例子
Java代码
- import java.util.Arrays;
- /**
- * wayswang
- * www.blogguy.cn
- */
- /**
- * @author wayswang *
- */
- public class Num2Rmb {
- private String[] hanArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌",
- "玖" };
- private String[] unitArr = { "拾", "佰", "仟" };
- private String[] unitBigArr = { "万", "亿" };
- private String[] pointArr = { "角", "分" };
- /**
- * 转中文输出
- * www.blogguy.cn
- * @param args
- */
- private String toHanArr(String numStr) {
- String result = "";
- int numberLen = numStr.length();
- int numberBit = 0;
- if (numberLen > 14) {
- return "不能转换大于万亿(14位)以上的数字";
- }
- // 4个数字为一节,先计算一共有几节
- int numPart = numberLen % 4 == 0 ? numberLen / 4 : numberLen / 4 + 1;
- // 第一节有几位
- // 54,8545,8454 则第一节只有两位
- int firstNumpart = numberLen - (numPart - 1) * 4;
- // 构造一个数组,存储每一节的数据
- String[] numPartArr = new String[numPart];
- int index= -1;
- for (int j = 0; j < numPartArr.length; j++) {
- numPartArr[j] = "";
- if (j == 0) {
- // 第一组
- numPartArr[j] += numStr.substring(0, firstNumpart);
- } else {
- // 不是第一组数字,应该是4位
- numPartArr[j] += numStr.substring(firstNumpart + (j - 1) * 4,
- firstNumpart + j * 4);
- }
- //转换为中文
- for (int i = 0; i < numPartArr[j].length(); i++) {
- int num = numPartArr[j].charAt(i) - 48;
- int numPartLength = numPartArr[j].length();
- if (i != numPartLength - 1 && num != 0) {
- result += hanArr[num] + unitArr[numPartLength - 2 - i ];
- } else {
- result += hanArr[num];
- }
- }
- if(numPartArr.length==2&&j==0){
- result += unitBigArr[0];
- }
- if(numPartArr.length==3&&j==0){
- result += unitBigArr[1];
- }
- if(numPartArr.length==3&&j==1){
- result += unitBigArr[0];
- }
- }
- return result;
- }
- public static void main(String args[]) {
- Num2Rmb nr = new Num2Rmb();
- System.out.println(nr.toHanArr("95852801421"));
- }
- }
测试一下
转载请注明来源:www.blogguy.cn
补充一下带小数点的转化方法
首先定义一个函数把数字分为整数和小数部分,返回一个数组
Java代码
- /**
- * 把一个数分解为整数和小数两步,返回一个String类型的数组
- * www.blogguy.cn wayswang
- * @param args
- */
- private String[] divide(double num) {
- long zheng = (long) num;
- long xiao = Math.round((num - zheng) * 100);
- return new String[] { zheng + "", xiao + "" };
- }
然后整数部分用上面的函数转化即可,小数部分直接更简单,就不多说了。
记录一下,头脑越来越笨了。



#1
