當(dāng)前位置:
首頁(yè) >
java开发_数字转换汉语中人民币的大写_完整版
發(fā)布時(shí)間:2025/5/22
96
豆豆
生活随笔
收集整理的這篇文章主要介紹了
java开发_数字转换汉语中人民币的大写_完整版
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)自:https://www.cnblogs.com/hongten/p/hongten_java_money.html
做這個(gè)應(yīng)用,源于突然的一個(gè)想法:看到發(fā)票上面的數(shù)字要轉(zhuǎn)換成漢語(yǔ)中人民幣的大寫(xiě)
于是就有了下面的這些事兒.....
先看看運(yùn)行效果:
======================================================
代碼部分
======================================================
?
1 package com.b510.number2char; 2 3 import java.math.BigDecimal; 4 5 /** 6 * 數(shù)字轉(zhuǎn)換為漢語(yǔ)中人民幣的大寫(xiě)<br> 7 * 8 * @author hongten 9 * @contact hongtenzone@foxmail.com 10 * @create 2013-08-13 11 */ 12 public class NumberToCN { 13 /** 14 * 漢語(yǔ)中數(shù)字大寫(xiě) 15 */ 16 private static final String[] CN_UPPER_NUMBER = { "零", "壹", "貳", "叁", "肆", 17 "伍", "陸", "柒", "捌", "玖" }; 18 /** 19 * 漢語(yǔ)中貨幣單位大寫(xiě),這樣的設(shè)計(jì)類(lèi)似于占位符 20 */ 21 private static final String[] CN_UPPER_MONETRAY_UNIT = { "分", "角", "元", 22 "拾", "佰", "仟", "萬(wàn)", "拾", "佰", "仟", "億", "拾", "佰", "仟", "兆", "拾", 23 "佰", "仟" }; 24 /** 25 * 特殊字符:整 26 */ 27 private static final String CN_FULL = "整"; 28 /** 29 * 特殊字符:負(fù) 30 */ 31 private static final String CN_NEGATIVE = "負(fù)"; 32 /** 33 * 金額的精度,默認(rèn)值為2 34 */ 35 private static final int MONEY_PRECISION = 2; 36 /** 37 * 特殊字符:零元整 38 */ 39 private static final String CN_ZEOR_FULL = "零元" + CN_FULL; 40 41 /** 42 * 把輸入的金額轉(zhuǎn)換為漢語(yǔ)中人民幣的大寫(xiě) 43 * 44 * @param numberOfMoney 45 * 輸入的金額 46 * @return 對(duì)應(yīng)的漢語(yǔ)大寫(xiě) 47 */ 48 public static String number2CNMontrayUnit(BigDecimal numberOfMoney) { 49 StringBuffer sb = new StringBuffer(); 50 // -1, 0, or 1 as the value of this BigDecimal is negative, zero, or 51 // positive. 52 int signum = numberOfMoney.signum(); 53 // 零元整的情況 54 if (signum == 0) { 55 return CN_ZEOR_FULL; 56 } 57 //這里會(huì)進(jìn)行金額的四舍五入 58 long number = numberOfMoney.movePointRight(MONEY_PRECISION) 59 .setScale(0, 4).abs().longValue(); 60 // 得到小數(shù)點(diǎn)后兩位值 61 long scale = number % 100; 62 int numUnit = 0; 63 int numIndex = 0; 64 boolean getZero = false; 65 // 判斷最后兩位數(shù),一共有四中情況:00 = 0, 01 = 1, 10, 11 66 if (!(scale > 0)) { 67 numIndex = 2; 68 number = number / 100; 69 getZero = true; 70 } 71 if ((scale > 0) && (!(scale % 10 > 0))) { 72 numIndex = 1; 73 number = number / 10; 74 getZero = true; 75 } 76 int zeroSize = 0; 77 while (true) { 78 if (number <= 0) { 79 break; 80 } 81 // 每次獲取到最后一個(gè)數(shù) 82 numUnit = (int) (number % 10); 83 if (numUnit > 0) { 84 if ((numIndex == 9) && (zeroSize >= 3)) { 85 sb.insert(0, CN_UPPER_MONETRAY_UNIT[6]); 86 } 87 if ((numIndex == 13) && (zeroSize >= 3)) { 88 sb.insert(0, CN_UPPER_MONETRAY_UNIT[10]); 89 } 90 sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]); 91 sb.insert(0, CN_UPPER_NUMBER[numUnit]); 92 getZero = false; 93 zeroSize = 0; 94 } else { 95 ++zeroSize; 96 if (!(getZero)) { 97 sb.insert(0, CN_UPPER_NUMBER[numUnit]); 98 } 99 if (numIndex == 2) { 100 if (number > 0) { 101 sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]); 102 } 103 } else if (((numIndex - 2) % 4 == 0) && (number % 1000 > 0)) { 104 sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]); 105 } 106 getZero = true; 107 } 108 // 讓number每次都去掉最后一個(gè)數(shù) 109 number = number / 10; 110 ++numIndex; 111 } 112 // 如果signum == -1,則說(shuō)明輸入的數(shù)字為負(fù)數(shù),就在最前面追加特殊字符:負(fù) 113 if (signum == -1) { 114 sb.insert(0, CN_NEGATIVE); 115 } 116 // 輸入的數(shù)字小數(shù)點(diǎn)后兩位為"00"的情況,則要在最后追加特殊字符:整 117 if (!(scale > 0)) { 118 sb.append(CN_FULL); 119 } 120 return sb.toString(); 121 } 122 123 public static void main(String[] args) { 124 double money = 2020004.01; 125 BigDecimal numberOfMoney = new BigDecimal(money); 126 String s = NumberToCN.number2CNMontrayUnit(numberOfMoney); 127 System.out.println("你輸入的金額為:【"+ money +"】 #--# [" +s.toString()+"]"); 128 } 129 }?
總結(jié)
以上是生活随笔為你收集整理的java开发_数字转换汉语中人民币的大写_完整版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Qt Charts基本组成
- 下一篇: hdu 1753大小数相加