将一个浮点数换成人民币读法字符串
1 import java.util.Arrays; 2 3 public class Num2Rmb 4 { 5 private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" , 6 "伍" , "陆" , "柒" , "捌" , "玖"}; 7 private String[] unitArr = {"分","角", "元" , "十" , "百" , "千", "万"}; 8 9 /** 10 * 把一个浮点数分解成整数部分和小数部分字符串 11 * @param num 需要被分解的浮点数 12 * @return 返回浮点数的字符串形式 13 */ 14 private String divide(double num) 15 { 16 // 将一个浮点数强制类型转换为long,即得到它的整数部分 17 long zheng = (long)num; 18 // 浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数 19 long xiao = Math.round((num - zheng) * 100); 20 String Str=zheng + String.valueOf(xiao); 21 return Str; 22 } 23 24 /** 25 * 把一个浮点数变成人民币中文形式 26 * @param numStr 需要转换的浮点数 27 * @return 转换成的人民币形式 28 */ 29 private String toHanStr(Double DnumStr) 30 { 31 String numStr=divide(DnumStr); 32 String result = ""; 33 int numLen = numStr.length(); 34 // 依次遍历数字字符串的每一位数字 35 for (int i = 0 ; i < numLen ; i++ ) 36 { 37 // 把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48 38 // 因此把char型数字减去48得到int型数字,例如'4'被转换成4。 39 int num = numStr.charAt(i) - 48; 40 // 数字不是零,则需要添加单位(分、角、元、十、百、千、万) 41 if ( num != 0) 42 { 43 result += hanArr[num] + unitArr[numLen - 1 - i]; 44 } 45 // 否则看是否是”角“位或者是否是“元”位 46 else if(i+1<numLen&&i!=numLen-3) 47 { 48 //如果不是”角“位或者不是“元”位,看是否后面还有0,如果有0什么都不做 49 //后面没有零就要在此时添上一个零字 50 int num1 = numStr.charAt(i+1) - 48; 51 if(num1!=0) 52 {result += hanArr[num];} 53 } 54 else 55 56 { //是0且是“角”位,直接加上元字 57 if(i==numLen-3) 58 {result +=unitArr[2];} 59 //是0且是“角”位,什么都不做 60 61 } 62 63 64 } 65 return result; 66 } 67 68 public static void main(String[] args) 69 { 70 Num2Rmb nr = new Num2Rmb(); 71 // 测试把一个浮点数变成人民币输出。 72 System.out.println(nr.toHanStr(60030.00)); 73 } 74 }
posted on 2017-09-29 10:20 GuaNiu9978 阅读(586) 评论(0) 收藏 举报
浙公网安备 33010602011771号