java將金額轉成大寫(java小寫金額轉大寫)

本文目錄一覽:

用java編譯金額的中文大寫轉換。

/**

* 金額小數轉換成中文大寫金額

* @author Neil Han

*

*/

public class ConvertMoneyToUppercase {

private static final String UNIT[] = { “萬”, “千”, “佰”, “拾”, “億”, “千”, “佰”,

“拾”, “萬”, “千”, “佰”, “拾”, “元”, “角”, “分” };

private static final String NUM[] = { “零”, “壹”, “貳”, “叄”, “肆”, “伍”, “陸”,

“柒”, “捌”, “玖” };

private static final double MAX_VALUE = 9999999999999.99D;

/**

* 將金額小數轉換成中文大寫金額

* @param money

* @return result

*/

public static String convertMoney(double money) {

if (money 0 || money MAX_VALUE)

return “參數非法!”;

long money1 = Math.round(money * 100); // 四捨五入到分

if (money1 == 0)

return “零元整”;

String strMoney = String.valueOf(money1);

int numIndex = 0; // numIndex用於選擇金額數值

int unitIndex = UNIT.length – strMoney.length(); // unitIndex用於選擇金額單位

boolean isZero = false; // 用於判斷當前為是否為零

String result = “”;

for (; numIndex strMoney.length(); numIndex++, unitIndex++) {

char num = strMoney.charAt(numIndex);

if (num == ‘0’) {

isZero = true;

if (UNIT[unitIndex] == “億” || UNIT[unitIndex] == “萬”

|| UNIT[unitIndex] == “元”) { // 如果當前位是億、萬、元,且數值為零

result = result + UNIT[unitIndex]; //補單位億、萬、元

isZero = false;

}

}else {

if (isZero) {

result = result + “零”;

isZero = false;

}

result = result + NUM[Integer.parseInt(String.valueOf(num))] + UNIT[unitIndex];

}

}

//不是角分結尾就加”整”字

if (!result.endsWith(“角”)!result.endsWith(“分”)) {

result = result + “整”;

}

//例如沒有這行代碼,數值”400000001101.2″,輸出就是”肆千億萬壹千壹佰零壹元貳角”

result = result.replaceAll(“億萬”, “億”);

return result;

}

public static void main(String[] args) {

double value = Double.parseDouble(“40330701101.2”);

System.out.println(“您輸入的金額(小寫)為:” + value);

System.out.println(“您輸入的金額(大寫)為:” + convertMoney(value));

}

}

java如何將數字轉為中文大寫

import org.apache.commons.lang3.StringUtils;

/**

* @Title: ConvertUpMoney

* @Description: 將數字金額轉換為大寫中文金額

* @date: 2019年6月18日 下午10:52:27

*/

public class ConvertUpMoney {

// 大寫數字

private static final String[] NUMBERS = {“零”,”壹”,”貳”,”叄”,”肆”,”伍”,”陸”,”柒”,”捌”,”玖”};

// 整數部分的單位

private static final String[] IUNIT = {“元”,”拾”,”佰”,”仟”,”萬”,”拾”,”佰”,”仟”,”億”,”拾”,”佰”,”仟”,”萬”,”拾”,”佰”,”仟”};

// 小數部分的單位

private static final String[] DUNIT = {“角”,”分”,”厘”};

/**

* 轉換為大寫的中文金額

* @param str 字元串類型的 金額數字

* @return

*/

public static String toChinese(String str) {

// 判斷輸入的金額字元串是否符合要求

if (StringUtils.isBlank(str) || !str.matches(“(-)?[\\d]*(.)?[\\d]*”)) {

return “抱歉,請輸入數字!”;

}

if(“0”.equals(str) || “0.00”.equals(str) || “0.0”.equals(str)) {

return “零元”;

}

// 判斷金額數字中是否存在負號”-“

boolean flag = false;

if(str.startsWith(“-“)){

// 標誌位,標誌此金額數字為負數

flag = true;

str = str.replaceAll(“-“, “”);

}

// 去掉金額數字中的逗號”,”

str = str.replaceAll(“,”, “”);

String integerStr;//整數部分數字

String decimalStr;//小數部分數字

// 初始化:分離整數部分和小數部分

if(str.indexOf(“.”)0) {

integerStr = str.substring(0,str.indexOf(“.”));

decimalStr = str.substring(str.indexOf(“.”) + 1);

}else if(str.indexOf(“.”)==0) {

integerStr = “”;

decimalStr = str.substring(1);

}else {

integerStr = str;

decimalStr = “”;

}

// beyond超出計算能力,直接返回

if(integerStr.length()IUNIT.length) {

return “超出計算能力!”;

}

// 整數部分數字

int[] integers = toIntArray(integerStr);

// 判斷整數部分是否存在輸入012的情況

if (integers.length1 integers[0] == 0) {

return “抱歉,輸入數字不符合要求!”;

}

// 設置萬單位

boolean isWan = isWan5(integerStr);

// 小數部分數字

int[] decimals = toIntArray(decimalStr);

// 返回最終的大寫金額

String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals);

if(flag){

// 如果是負數,加上”負”

return “負” + result;

}else{

return result;

}

}

/**

* 將字元串轉為int數組

* @param number 數字

* @return

*/

private static int[] toIntArray(String number) {

int[] array = new int[number.length()];

for(int i = 0;inumber.length();i++) {

array[i] = Integer.parseInt(number.substring(i,i+1));

}

return array;

}

/**

* 將整數部分轉為大寫的金額

* @param integers 整數部分數字

* @param isWan 整數部分是否已經是達到【萬】

* @return

*/

public static String getChineseInteger(int[] integers,boolean isWan) {

StringBuffer chineseInteger = new StringBuffer(“”);

int length = integers.length;

if (length == 1 integers[0] == 0) {

return “”;

}

for(int i=0; ilength; i++) {

String key = “”;

if(integers[i] == 0) {

if((length – i) == 13)//萬(億)

key = IUNIT[4];

else if((length – i) == 9) {//億

key = IUNIT[8];

}else if((length – i) == 5 isWan) {//萬

key = IUNIT[4];

}else if((length – i) == 1) {//元

key = IUNIT[0];

}

if((length – i)1 integers[i+1]!=0) {

key += NUMBERS[0];

}

}

chineseInteger.append(integers[i]==0?key:(NUMBERS[integers[i]]+IUNIT[length – i -1]));

}

return chineseInteger.toString();

}

/**

* 將小數部分轉為大寫的金額

* @param decimals 小數部分的數字

* @return

*/

private static String getChineseDecimal(int[] decimals) {

StringBuffer chineseDecimal = new StringBuffer(“”);

for(int i = 0;idecimals.length;i++) {

if(i == 3) {

break;

}

chineseDecimal.append(decimals[i]==0?””:(NUMBERS[decimals[i]]+DUNIT[i]));

}

return chineseDecimal.toString();

}

/**

* 判斷當前整數部分是否已經是達到【萬】

* @param integerStr 整數部分數字

* @return

*/

private static boolean isWan5(String integerStr) {

int length = integerStr.length();

if(length 4) {

String subInteger = “”;

if(length 8) {

subInteger = integerStr.substring(length- 8,length -4);

}else {

subInteger = integerStr.substring(0,length – 4);

}

return Integer.parseInt(subInteger) 0;

}else {

return false;

}

}

// Test

public static void main(String[] args) {

String number = “12.56”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “1234567890563886.123”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “1600”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “156,0”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “-156,0”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “0.12”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “0.0”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “01.12”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “0125”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “-0125”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

number = “sdw5655”;

System.out.println(number+”: “+ConvertUpMoney.toChinese(number));

System.out.println(null+”: “+ConvertUpMoney.toChinese(null));

}

}

JAVA 數字轉換為中文大寫的轉換

package com.heyang;

/**

* 將10億以內的阿拉伯數字轉成漢字大寫形式

* @author xizhenyin

*

*/

public class CnUpperCaser {

// 整數部分

private String integerPart;

// 小數部分

private String floatPart;

// 將數字轉化為漢字的數組,因為各個實例都要使用所以設為靜態

private static final char[] cnNumbers={‘零’,’壹’,’貳’,’叄’,’肆’,’伍’,’陸’,’柒’,’捌’,’玖’};

// 供分級轉化的數組,因為各個實例都要使用所以設為靜態

private static final char[] series={‘元’,’拾’,’百’,’仟’,’萬’,’拾’,’百’,’仟’,’億’};

/**

* 構造函數,通過它將阿拉伯數字形式的字元串傳入

* @param original

*/

public CnUpperCaser(String original){

// 成員變數初始化

integerPart=””;

floatPart=””;

if(original.contains(“.”)){

// 如果包含小數點

int dotIndex=original.indexOf(“.”);

integerPart=original.substring(0,dotIndex);

floatPart=original.substring(dotIndex+1);

}

else{

// 不包含小數點

integerPart=original;

}

}

/**

* 取得大寫形式的字元串

* @return

*/

public String getCnString(){

// 因為是累加所以用StringBuffer

StringBuffer sb=new StringBuffer();

// 整數部分處理

for(int i=0;iintegerPart.length();i++){

int number=getNumber(integerPart.charAt(i));

sb.append(cnNumbers[number]);

sb.append(series[integerPart.length()-1-i]);

}

// 小數部分處理

if(floatPart.length()0){

sb.append(“點”);

for(int i=0;ifloatPart.length();i++){

int number=getNumber(floatPart.charAt(i));

sb.append(cnNumbers[number]);

}

}

// 返回拼接好的字元串

return sb.toString();

}

/**

* 將字元形式的數字轉化為整形數字

* 因為所有實例都要用到所以用靜態修飾

* @param c

* @return

*/

private static int getNumber(char c){

String str=String.valueOf(c);

return Integer.parseInt(str);

}

/**

* @param args

*/

public static void main(String[] args) {

System.out.println(new CnUpperCaser(“123456789.12345”).getCnString());

System.out.println(new CnUpperCaser(“123456789”).getCnString());

System.out.println(new CnUpperCaser(“.123456789”).getCnString());

System.out.println(new CnUpperCaser(“0.1234”).getCnString());

System.out.println(new CnUpperCaser(“1”).getCnString());

System.out.println(new CnUpperCaser(“12”).getCnString());

System.out.println(new CnUpperCaser(“123”).getCnString());

System.out.println(new CnUpperCaser(“1234”).getCnString());

System.out.println(new CnUpperCaser(“12345”).getCnString());

System.out.println(new CnUpperCaser(“123456”).getCnString());

System.out.println(new CnUpperCaser(“1234567”).getCnString());

System.out.println(new CnUpperCaser(“12345678”).getCnString());

System.out.println(new CnUpperCaser(“123456789”).getCnString());

}

}

Java金額的中文大寫方式

/**

* 金額小數轉換成中文大寫金額

* @author Neil Han

*

*/

public class ConvertMoneyToUppercase {

private static final String UNIT[] = { “萬”, “千”, “佰”, “拾”, “億”, “千”, “佰”,

“拾”, “萬”, “千”, “佰”, “拾”, “元”, “角”, “分” };

private static final String NUM[] = { “零”, “壹”, “貳”, “叄”, “肆”, “伍”, “陸”,

“柒”, “捌”, “玖” };

private static final double MAX_VALUE = 9999999999999.99D;

/**

* 將金額小數轉換成中文大寫金額

* @param money

* @return result

*/

public static String convertMoney(double money) {

if (money 0 || money MAX_VALUE)

return “參數非法!”;

long money1 = Math.round(money * 100); // 四捨五入到分

if (money1 == 0)

return “零元整”;

String strMoney = String.valueOf(money1);

int numIndex = 0; // numIndex用於選擇金額數值

int unitIndex = UNIT.length – strMoney.length(); // unitIndex用於選擇金額單位

boolean isZero = false; // 用於判斷當前為是否為零

String result = “”;

for (; numIndex strMoney.length(); numIndex++, unitIndex++) {

char num = strMoney.charAt(numIndex);

if (num == ‘0’) {

isZero = true;

if (UNIT[unitIndex] == “億” || UNIT[unitIndex] == “萬”

|| UNIT[unitIndex] == “元”) { // 如果當前位是億、萬、元,且數值為零

result = result + UNIT[unitIndex]; //補單位億、萬、元

isZero = false;

}

}else {

if (isZero) {

result = result + “零”;

isZero = false;

}

result = result + NUM[Integer.parseInt(String.valueOf(num))] + UNIT[unitIndex];

}

}

//不是角分結尾就加”整”字

if (!result.endsWith(“角”)!result.endsWith(“分”)) {

result = result + “整”;

}

//例如沒有這行代碼,數值”400000001101.2″,輸出就是”肆千億萬壹千壹佰零壹元貳角”

result = result.replaceAll(“億萬”, “億”);

return result;

}

public static void main(String[] args) {

double value = Double.parseDouble(“40330701101.2”);

System.out.println(“您輸入的金額(小寫)為:” + value);

System.out.println(“您輸入的金額(大寫)為:” + convertMoney(value));

}

}

JAVA練習題 金額的中文大寫

//我自己寫的

//把String 換成了StringBuilder 因為後者只要新建後,無論如何變化,都是同一個字元串,

//而String 是不可變的, 每改變一次,就要新建一個變數

//也可以用StringBuffer , 和StringBuilder用法一樣, 不過是線程安全的

public class SmallToBig {

/**

* @param args

* 把數字換成大寫的中文貨幣字元 123456789 換成

* 零,壹,貳,叄,肆,伍,陸,柒,捌,玖

* “元”,”十”,”佰”,”仟”,”萬”,”十”,”佰”,”仟”,”億”,”十”,”佰”,”仟”,” “,””,””,”” 太大的就沒寫了, 直接輸出大寫數字

*/

public static void main(String[] args) {

StringBuilder sb = new StringBuilder();

sb.append(“3789341.512”);

System.out.print( getFloatBigCn(sb));

}

public static StringBuilder getFloatBigCn(StringBuilder sb){

String [] big={“零”,”壹”,”貳”,”叄”,”肆”,”伍”,”陸”,”柒”,”捌”,”玖”};

String [] fUnit ={“角”,”分”,””,””,””};

StringBuilder floatStr=new StringBuilder();

if(sb.indexOf(“.”)-1){ //是否存在小數點

StringBuilder intPart = new StringBuilder(sb.substring(0, sb.indexOf(“.”)));//取得整數部分

StringBuilder flPart = new StringBuilder(sb.substring(sb.indexOf(“.”)+1, sb.length()));//取得小數部分

//整數部分處理

floatStr.append(getIntBigCn(intPart));//整數部分給整數方法處理

//小數點後處理

if(flPart.length()2)

flPart = flPart.delete(2, flPart.length()); //小數點後只取到分 ,注意,此部會把2位後的數值刪除掉

for (int i = 0; i = flPart.length()-1; i++) {

int t = Integer.parseInt(flPart.substring(i, i+1));

floatStr.append(big[t]+fUnit[i]); // 數值加單位

}

}else //如果沒有小數點, 直接給處理整數的方法處理

floatStr.append(getIntBigCn(sb));

return floatStr;

}

public static StringBuilder getIntBigCn(StringBuilder sb){

String[] big={“零”,”壹”,”貳”,”叄”,”肆”,”伍”,”陸”,”柒”,”捌”,”玖”};

String [] iUnit ={“元”,”十”,”佰”,”仟”,”萬”,”十”,”佰”,”仟”,”億”,

“十”,”佰”,”仟”,” “,””,””,””,””,””,””,””,””};//中國人太有錢。。。超出單位所能承受

StringBuilder intStr=new StringBuilder();

int cnt=0;//換單位

for(int i=sb.length();i0 ; i–){ //倒取的值

int m = Integer.parseInt(sb.substring(i-1,i));

intStr.insert(0,big[m]+iUnit[cnt]);//從前面插入

cnt++;

}

return intStr;

}

}

JAVA 編程 輸出金額的中文大寫形式

public class Text {

/**

* 測試程序的可行性

* @param args

*/

public static void main(String[] args) {

System.out.println(“——–將數字轉換成中文金額的大寫形式————\n”);

Trans2RMB t2r = new Trans2RMB();

String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));

// 如果轉換過後是一個空串,則不輸出屏幕

if(!””.equals(s)) {

System.out.println(“轉換成中文後為:” + s);;

}

System.out.println(“\n———————————————“);

}

/**

* 從命令行接收一個數,在其中調用 checkNum() 方法對其進行

* 驗證,並返回相應的值

* @return 如果輸入合法,返回輸入的這個數

*/

private String getNum() {

String s = null;

System.out.println(“請輸入一個數字(精確到小數點後兩位):”);

// 從命令行輸入這個浮點數

java.util.Scanner scanner = new java.util.Scanner(System.in);

s = scanner.next();

// 判斷用戶輸入是否合法

// 若合法,返回這個值;若非法返回 “0”

if(this.checkNum(s)) {

return s;

} else {

return “”;

}

}

/**

* 判斷用戶輸入的數據是否合法,用戶只能輸入大於零的數字,不能輸入其它字元

* @param s String

* @return 如果用戶輸入數據合法,返回 true,否則返回 false

*/

private boolean checkNum(String s) {

// 如果用戶輸入的數里有非數字字元,則視為非法數據,返回 false

try {

float f = Float.valueOf(s);

// 如果這個數小於零則視為非法數據,返回 false

if(f 0) {

System.out.println(“非法數據,請檢查!”);

return false;

}else {

return true;

}

} catch (NumberFormatException e) {

System.out.println(“非法數據,請檢查!”);

return false;

}

}

/**

* 把用戶輸入的數以小數點為界分割開來,並調用 numFormat() 方法

* 進行相應的中文金額大寫形式的轉換

* 註:傳入的這個數應該是經過 roundString() 方法進行了四捨五入操作的

* @param s String

* @return 轉換好的中文金額大寫形式的字元串

*/

private String splitNum(String s) {

// 如果傳入的是空串則繼續返回空串

if(“”.equals(s)) {

return “”;

}

// 以小數點為界分割這個字元串

int index = s.indexOf(“.”);

// 截取並轉換這個數的整數部分

String intOnly = s.substring(0, index);

String part1 = this.numFormat(1, intOnly);

// 截取並轉換這個數的小數部分

String smallOnly = s.substring(index + 1);

String part2 = this.numFormat(2, smallOnly);

// 把轉換好了的整數部分和小數部分重新拼湊一個新的字元串

String newS = part1 + part2;

return newS;

}

/**

* 對傳入的數進行四捨五入操作

* @param s String 從命令行輸入的那個數

* @return 四捨五入後的新值

*/

private String roundString(String s) {

// 如果傳入的是空串則繼續返回空串

if(“”.equals(s)) {

return “”;

}

// 將這個數轉換成 double 類型,並對其進行四捨五入操作

double d = Double.parseDouble(s);

// 此操作作用在小數點後兩位上

d = (d * 100 + 0.5) / 100;

// 將 d 進行格式化

s = new java.text.DecimalFormat(“##0.000”).format(d);

// 以小數點為界分割這個字元串

int index = s.indexOf(“.”);

// 這個數的整數部分

String intOnly = s.substring(0, index);

// 規定數值的最大長度只能到萬億單位,否則返回 “0”

if(intOnly.length()13) {

System.out.println(“輸入數據過大!(整數部分最多13位!)”);

return “”;

}

// 這個數的小數部分

String smallOnly = s.substring(index + 1);

// 如果小數部分大於兩位,只截取小數點後兩位

if(smallOnly.length()2) {

String roundSmall = smallOnly.substring(0, 2);

// 把整數部分和新截取的小數部分重新拼湊這個字元串

s = intOnly + “.” + roundSmall;

}

return s;

}

/**

* 把傳入的數轉換為中文金額大寫形式

* @param flag int 標誌位,1 表示轉換整數部分,0 表示轉換小數部分

* @param s String 要轉換的字元串

* @return 轉換好的帶單位的中文金額大寫形式

*/

private String numFormat(int flag, String s) {

int sLength = s.length();

// 貨幣大寫形式

String bigLetter args) {

System.out.println(“——–將數字轉換成中文金額的大寫形式————\n”);

Trans2RMB t2r = new Trans2RMB();

String s = t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));

// 如果轉換過後是一個空串,則不輸出屏幕

if(!””.equals(s)) {

System.out.println(“轉換成中文後為:” + s);;

}

System.out.println(“\n———————————————“);

}

/**

* 從命令行接收一個數,在其中調用 checkNum() 方法對其進行

* 驗證,並返回相應的值

* @return 如果輸入合法,返回輸入的這個數

*/

private String getNum() {

String s = null;

System.out.println(“請輸入一個數字(精確到小數點後兩位):”);

// 從命令行輸入這個浮點數

java.util.Scanner scanner = new java.util.Scanner(System.in);

s = scanner.next();

// 判斷用戶輸入是否合法

// 若合法,返回這個值;若非法返回 “0”

if(this.checkNum(s)) {

return s;

} else {

return “”;

}

}

/**

* 判斷用戶輸入的數據是否合法,用戶只能輸入大於零的數字,不能輸入其它字元

* @param s String

* @return 如果用戶輸入數據合法,返回 true,否則返回 false

*/

private boolean checkNum(String s) {

// 如果用戶輸入的數里有非數字字元,則視為非法數據,返回 false

try {

float f = Float.valueOf(s);

// 如果這個數小於零則視為非法數據,返回 false

if(f 0) {

System.out.println(“非法數據,請檢查!”);

return false;

}else {

return true;

}

} catch (NumberFormatException e) {

System.out.println(“非法數據,請檢查!”);

return false;

}

}

/**

* 把用戶輸入的數以小數點為界分割開來,並調用 numFormat() 方法

* 進行相應的中文金額大寫形式的轉換

* 註:傳入的這個數應該是經過 roundString() 方法進行了四捨五入操作的

* @param s String

* @return 轉換好的中文金額大寫形式的字元串

*/

private String splitNum(String s) {

// 如果傳入的是空串則繼續返回空串

if(“”.equals(s)) {

return “”;

}

// 以小數點為界分割這個字元串

int index = s.indexOf(“.”);

// 截取並轉換這個數的整數部分

String intOnly = s.substring(0, index);

String part1 = this.numFormat(1, intOnly);

// 截取並轉換這個數的小數部分

String smallOnly = s.substring(index + 1);

String part2 = this.numFormat(2, smallOnly);

// 把轉換好了的整數部分和小數部分重新拼湊一個新的字元串

String newS = part1 + part2;

return newS;

}

/**

* 對傳入的數進行四捨五入操作

* @param s String 從命令行輸入的那個數

* @return 四捨五入後的新值

*/

private String roundString(String s) {

// 如果傳入的是空串則繼續返回空串

if(“”.equals(s)) {

return “”;

}

// 將這個數轉換成 double 類型,並對其進行四捨五入操作

double d = Double.parseDouble(s);

// 此操作作用在小數點後兩位上

d = (d * 100 + 0.5) / 100;

// 將 d 進行格式化

s = new java.text.DecimalFormat(“##0.000”).format(d);

// 以小數點為界分割這個字元串

int index = s.indexOf(“.”);

// 這個數的整數部分

String intOnly = s.substring(0, index);

// 規定數值的最大長度只能到萬億單位,否則返回 “0”

if(intOnly.length()13) {

System.out.println(“輸入數據過大!(整數部分最多13位!)”);

return “”;

}

// 這個數的小數部分

String smallOnly = s.substring(index + 1);

// 如果小數部分大於兩位,只截取小數點後兩位

if(smallOnly.length()2) {

String roundSmall = smallOnly.substring(0, 2);

// 把整數部分和新截取的小數部分重新拼湊這個字元串

s = intOnly + “.” + roundSmall;

}

return s;

}

/**

* 把傳入的數轉換為中文金額大寫形式

* @param flag int 標誌位,1 表示轉換整數部分,0 表示轉換小數部分

* @param s String 要轉換的字元串

* @return 轉換好的帶單位的中文金額大寫形式

*/

private String numFormat(int flag, String s) {

int sLength = s.length();

// 貨幣大寫形式

String bigLetter[] = {“零”, “壹”, “貳”, “叄”, “肆”, “伍”, “陸”, “柒”, “捌”, “玖”};

// 貨幣單位

String unit[] = {“元”, “拾”, “佰”, “仟”, “萬”,

// 拾萬位到仟萬位

“拾”, “佰”, “仟”,

// 億位到萬億位

“億”, “拾”, “佰”, “仟”, “萬”};

String small[] = {“分”, “角”};

// 用來存放轉換後的新字元串

String newS = “”;

// 逐位替換為中文大寫形式

for(int i = 0; i sLength; i ++) {

if(flag == 1) {

// 轉換整數部分為中文大寫形式(帶單位)

newS = newS + bigLetter[s.charAt(i) – 48] + unit[sLength – i – 1];

} else if(flag == 2) {

// 轉換小數部分(帶單位)

newS = newS + bigLetter[s.charAt(i) – 48] + small[sLength – i – 1];

}

}

return newS;

}

/**

* 把已經轉換好的中文金額大寫形式加以改進,清理這個字

* 符串裡面多餘的零,讓這個字元串變得更加可觀

* 註:傳入的這個數應該是經過 splitNum() 方法進行處理,這個字

* 符串應該已經是用中文金額大寫形式表示的

* @param s String 已經轉換好的字元串

* @return 改進後的字元串

*/

private String cleanZero(String s) {

// 如果傳入的是空串則繼續返回空串

if(“”.equals(s)) {

return “”;

}

// 如果用戶開始輸入了很多 0 去掉字元串前面多餘的『零『,使其看上去更符合習慣

while(s.charAt(0) == 『零『) {

// 將字元串中的 “零” 和它對應的單位去掉

s = s.substring(2);

// 如果用戶當初輸入的時候只輸入了 0,則只返回一個 “零”

if(s.length() == 0) {

return “零”;

}

}

// 字元串中存在多個『零『在一起的時候只讀出一個『零『,並省略多餘的單位

/* 由於本人對演算法的研究太菜了,只能用4個正則表達式去轉換了,各位大蝦別介意哈… */

String regex1[] = {“零仟”, “零佰”, “零拾”};

String regex2[] = {“零億”, “零萬”, “零元”};

String regex3[] = {“億”, “萬”, “元”};

String regex4[] = {“零角”, “零分”};

// 第一輪轉換把 “零仟”, 零佰”,”零拾”等字元串替換成一個”零”

for(int i = 0; i 3; i ++) {

s = s.replaceAll(regex1[i], “零”);

}

// 第二輪轉換考慮 “零億”,”零萬”,”零元”等情況

// “億”,”萬”,”元”這些單位有些情況是不能省的,需要保留下來

for(int i = 0; i 3; i ++) {

// 當第一輪轉換過後有可能有很多個零疊在一起

// 要把很多個重複的零變成一個零

s = s.replaceAll(“零零零”, “零”);

s = s.replaceAll(“零零”, “零”);

s = s.replaceAll(regex2[i], regex3[i]);

}

// 第三輪轉換把”零角”,”零分”字元串省略

for(int i = 0; i 2; i ++) {

s = s.replaceAll(regex4[i], “”);

}

// 當”萬”到”億”之間全部是”零”的時候,忽略”億萬”單位,只保留一個”億”

s = s.replaceAll(“億萬”, “億”);

return s;

}

}

原創文章,作者:CFKVN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/325296.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CFKVN的頭像CFKVN
上一篇 2025-01-13 13:23
下一篇 2025-01-13 13:23

相關推薦

  • 金額選擇性序列化

    本文將從多個方面對金額選擇性序列化進行詳細闡述,包括其定義、使用場景、實現方法等。 一、定義 金額選擇性序列化指根據傳入的金額值,選擇是否進行序列化,以達到減少數據傳輸的目的。在實…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論