还有一个错误 错误的那个if语句需要放到当前if的外部才有作用 完整的代码 如下:
- import java.util.Arrays;
- public class Num2Rmb
- {
- private String [] hanArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
- private String [] unitArr = {"十","百","千"};
- /**
- *把一个浮点数分解成整数和小数两个部分的字符串
- * @param num 需要分解的浮点数
- * @return 分解出来的整数与小数部分,第一个数组元素为整数部分,第二个数组元素为小数部分。
- */
- private String [] divide(double num)
- {
- long zheng = (long)num;
- long xiao = Math.round((num - zheng) * 100);
- //浮点数减去整数部分,得到小数部分乘以100表示去两位小数。
- //round方法,他表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,
- //所以,Math.round(11.5)的结果是12,Math.round(-11.5)的结果为-11.
- //Math.round( )符合这样的规律:小数点后大于5全部加,等于5正数加,小于5全不加。
- return new String [] {zheng + "", String.valueOf(xiao)};
- }
-
- /**
- *把一个四位的数字字符串变成汉字字符串。
- * @param numStr 需要被转换的四位的数字字符串。
- * @return 四位的数字字符串被转换成的汉字字符串。
- */
- private String toHanStr(String numStr)
- {
- String result = "";
- int numLen = numStr.length();
- //一次遍历数字字符串的每一个元素
- for (int i = 0;i < numLen ;i++ )
- {
- //把char行数字转换成int型数字,其ASCII码值相差48
- //因此吧char型数字减去48得到int型数字,'4'——>4
- int num = numStr.charAt(i)-48;
- //public char charAt(int index)返回指定索引处的 char 值。
- //索引范围为从 0 到 length() - 1。
- //序列的第一个 char 值位于索引 0 处,第二个位于索引 1 处,
- //依此类推,这类似于数组索引。
- //如果索引指定的 char 值是代理项,则返回代理项值
- if ((i == 0) && (num == 0)) continue;
- if (i != numLen - 1 && num != 0)//如果不是最后一个数字,而且数字不为零,则添加单位(千百十)
- {
-
- result += hanArr[num] + unitArr[numLen - 2 - i];
- //否则不添加单位
- }
- else
- {
- result += hanArr[num];
- }
- }
- return result += "元";
- }
- public static void main(String[] args)
- {
- Num2Rmb nr = new Num2Rmb();
- System.out.println(Arrays.toString(nr.divide(1341435.1435)));
- System.out.println(nr.toHanStr("0343"));
- System.out.println(nr.toHanStr("9007"));
- System.out.println(nr.toHanStr("1079"));
- }
- }
复制代码
实现的功能: 将一个4位数字的字符串转换成中文读法 , 还在完善 有兴趣的可以试一下 再做交流
还存在的问题:
1、两个零连在一起该如何处理?
2、最低位是零怎么办?
|