人民币数字转换汉字【修改整理】

来源:互联网 发布:淘宝服装模特拍摄视频 编辑:程序博客网 时间:2024/06/06 01:15


package com.lengol.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Test {public static void main(String[] args) {String strNum = "";double dNum;System.out.println("输入:");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));try {strNum = br.readLine();dNum = Double.parseDouble(strNum);System.out.println("四舍五入,精确到(分),转化成大写:");System.out.println(changeToBig(dNum));} catch (IOException e) {System.out.println("【读写异常】");} catch (NumberFormatException e) {System.out.println("【数字格式异常】");} catch (StringIndexOutOfBoundsException e) {System.out.println("【字符串索引越界异常】");} catch (ArrayIndexOutOfBoundsException e) {System.out.println("【数组索引越界异常】");} catch(Exception e){System.out.println("【其他异常】");}System.gc();}public static String changeToBig(double value) {char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示char[] vunit = { '万', '亿' }; // 段名表示char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示long midVal = (long) (value * 100 + 0.5); // 转化成整形,四舍五入String valStr = String.valueOf(midVal); // 转化成字符串if("0".equals(valStr)){return digit[0] + "圆整";}String head = valStr.substring(0, valStr.length() - 2); // 取整数部分String rail = valStr.substring(valStr.length() - 2); // 取小数部分String prefix = ""; // 整数部分转化的结果String suffix = ""; // 小数部分转化的结果// 处理小数点后面的数if (rail.equals("00")) { // 如果小数部分为0suffix = "整";} else {suffix = digit[rail.charAt(0) - '0'] + "角"+ digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来}// 处理小数点前面的数char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组boolean preZero = false; // 标志当前位的上一位是否为有效0位(如万位的0对千位无效)byte zeroSerNum = 0; // 连续出现0的次数for (int i = 0; i < chDig.length; i++) { // 循环处理每个数字int idx = (chDig.length - i - 1) % 4; // 取段内位置int vidx = (chDig.length - i - 1) / 4; // 取段位置if (chDig[i] == '0') { // 如果当前字符是0preZero = true;zeroSerNum++; // 连续0次数递增if (idx == 0 && vidx > 0 && zeroSerNum < 4) {prefix += vunit[vidx - 1];preZero = false; // 不管上一位是否为0,置为无效0位}} else {zeroSerNum = 0; // 连续0次数清零if (preZero) { // 上一位为有效0位prefix += digit[0]; // 只有在这地方用到'零'preZero = false;}prefix += digit[chDig[i] - '0']; // 转化该数字表示if (idx > 0)prefix += hunit[idx - 1];if (idx == 0 && vidx > 0) {prefix += vunit[(vidx + 1) % 2];for (int j = 0; j < (vidx + 1) / 2 - 1; j++) {prefix += vunit[1];}}}}if (prefix.length() > 0)prefix += '圆'; // 如果整数部分存在,则有圆的字样return prefix + suffix; // 返回正确表示}}


0 0
原创粉丝点击