java將數(shù)字價格轉(zhuǎn)換為中文大寫代碼示例(工具類)
在Java中,將數(shù)字價格轉(zhuǎn)換為中文大寫通常涉及幾個步驟,包括將數(shù)字分解為各個部分(如個位、十位、百位等),然后根據(jù)這些部分轉(zhuǎn)換為對應(yīng)的中文大寫數(shù)字,并添加適當?shù)膯挝唬ㄈ缭⒔?、分)?/p>
以下是一個示例方法,它接受一個BigDecimal類型的價格(單位為元,包含小數(shù)點后兩位),并將其轉(zhuǎn)換為中文大寫形式:
import java.math.BigDecimal; public class PriceConverter { private static final String[] CHINESE_NUMBERS = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"}; private static final String[] UNITS = {"", "拾", "佰", "仟"}; private static final String[] BIG_UNITS = {"", "萬", "億", "兆", "京", "垓", "秭", "穰", "溝", "澗", "正", "載", "極"}; // 根據(jù)需要可以增加更多大單位 public static String convertToChinese(BigDecimal price) { if (price == null || price.compareTo(BigDecimal.ZERO) < 0) { throw new IllegalArgumentException("價格不能為空或小于0"); } // 轉(zhuǎn)換為字符串并截取小數(shù)點前后部分 String priceStr = price.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString(); String integerPart = priceStr.split("\\.")[0]; // 整數(shù)部分 String decimalPart = priceStr.split("\\.")[1]; // 小數(shù)部分(角、分) // 處理整數(shù)部分 String integerChinese = convertToChinesePart(integerPart, UNITS, BIG_UNITS); // 處理小數(shù)部分 String decimalChinese = ""; if (!"00".equals(decimalPart)) { decimalChinese = convertToDecimalChinese(decimalPart); } // 合并結(jié)果 return integerChinese + "元" + decimalChinese; } private static String convertToChinesePart(String numberStr, String[] units, String[] bigUnits) { if ("0".equals(numberStr)) { return CHINESE_NUMBERS[0]; } StringBuilder sb = new StringBuilder(); int unitIndex = 0; // int zeroCount = 0; for (int i = numberStr.length() - 1; i >= 0; i--) { int digit = numberStr.charAt(i) - '0'; String chineseDigit = CHINESE_NUMBERS[digit]; if (digit == 0) { // zeroCount++; // 連續(xù)零的處理:只在非零數(shù)字后面、單位變化處或字符串開始處添加一個零 if (sb.length() > 0 && (sb.charAt(sb.length() - 1) != CHINESE_NUMBERS[0].charAt(0) || unitIndex == 0 || i == 0)) { sb.insert(0, chineseDigit); } } else { // 添加非零數(shù)字和對應(yīng)單位 sb.insert(0, chineseDigit + units[unitIndex]); // zeroCount = 0; // 重置連續(xù)零的計數(shù) } // 切換到下一個單位 if (++unitIndex == units.length) { unitIndex = 0; // 循環(huán)使用單位數(shù)組 if (sb.length() > 0 && i > 0) { sb.insert(0, bigUnits[(numberStr.length()-i) / units.length]); } } } // 去除末尾可能多余的零 while (sb.length() > 0 && sb.charAt(0) == CHINESE_NUMBERS[0].charAt(0)) { sb.deleteCharAt(0); } return sb.toString(); } private static String convertToDecimalChinese(String decimalPart) { StringBuilder sb = new StringBuilder(); if (decimalPart.charAt(0) != '0') { sb.append(CHINESE_NUMBERS[decimalPart.charAt(0) - '0']).append("角"); } if (decimalPart.length() > 1 && decimalPart.charAt(1) != '0') { sb.append(CHINESE_NUMBERS[decimalPart.charAt(1) - '0']).append("分"); } return sb.toString(); } public static void main(String[] args) { System.out.println(convertToChinese(new BigDecimal("4545444444111141233123522212345.67"))); // 肆佰伍拾肆穰伍仟肆佰肆拾肆秭肆仟肆佰肆拾壹垓壹仟壹佰壹拾肆京壹仟貳佰叁拾叁兆壹仟貳佰叁拾伍億貳仟貳佰貳拾壹萬貳仟叁佰肆拾伍元陸角柒分 System.out.println(convertToChinese(new BigDecimal("100.00"))); // 壹佰元 System.out.println(convertToChinese(new BigDecimal("0.01"))); // 零元壹分 System.out.println(convertToChinese(new BigDecimal("0.00"))); // 零元 } }
附:java將輸入的數(shù)字金額轉(zhuǎn)換為中文大寫金額
將輸入的數(shù)字字符串中的每一個數(shù)字字符轉(zhuǎn)換為對應(yīng)的中文大寫,例如12345轉(zhuǎn)換為壹貳叁肆伍,再將此中文大寫和對應(yīng)的單位進行字符串的拼接并一起輸出
輸出結(jié)果為:零佰零拾壹萬貳仟叁佰肆拾伍元
package com.ithm.stringdemo; import java.util.Scanner; public class Demo1 { //獲取每一個數(shù)字對應(yīng)的中文大寫 public static String getCapitalNumber(int number){ String []capitalnumber={"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"}; return capitalnumber[number]; } public static void main(String[] args) { //數(shù)組里面放入輸入的金額的每一位數(shù)字 int []sz=new int[7]; Scanner sc=new Scanner(System.in); int money; while (true){ System.out.print("請輸入任意金額:"); money=sc.nextInt(); if(money>=0 ||money<=9999999) { break; }else { System.out.println("金額無效,請重新輸入"); } } String capmoney=""; int i=0; while (true){ int ge=money%10; sz[i++]=ge; money=money/10; if(money==0) break; } //獲取大寫數(shù)字的字符串 String capitalnumber=""; for (int j = 0; j < sz.length; j++) { capitalnumber=getCapitalNumber(sz[j]); capmoney=capitalnumber+capmoney; } //定義一個字符串數(shù)組存放單位 String []arr={"佰","拾","萬","仟","佰","拾","元"}; //將大寫數(shù)字和單位數(shù)組進行字符串的拼接 String result=""; for (int k = 0; k < capmoney.length(); k++) { char c=capmoney.charAt(k); result=result+c+arr[k]; } System.out.println(result); } }
總結(jié)
到此這篇關(guān)于java將數(shù)字價格轉(zhuǎn)換為中文大寫的文章就介紹到這了,更多相關(guān)java數(shù)字價格轉(zhuǎn)換中文大寫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實現(xiàn)在線編輯預(yù)覽office文檔詳解
PageOffice是一款在線的office編輯軟件,幫助Web應(yīng)用系統(tǒng)或Web網(wǎng)站實現(xiàn)用戶在線編輯Word、Excel、PowerPoint文檔,下面我們就來看看如何使用Java實現(xiàn)在線預(yù)覽office吧2024-01-01Java學(xué)習(xí)之反射機制及應(yīng)用場景介紹
本篇文章主要介紹了Java反射機制及應(yīng)用場景,反射機制是很多Java框架的基石。非常具有實用價值,需要的朋友可以參考下。2016-11-11@NotEmpty、@NotBlank、@NotNull的區(qū)別
這篇文章主要介紹了@NotEmpty、@NotBlank、@NotNull的區(qū)別,需要的朋友可以參考下2016-09-09TCP/IP協(xié)議中三次握手四次揮手的原理及流程分析
這篇文章主要介紹了TCP/IP協(xié)議中三次握手四次揮手的原理及流程分析,具有一定參考價值,需要的朋友可以了解下。2017-11-11如何使用spring-ws發(fā)布webservice服務(wù)
文章介紹了如何使用Spring-WS發(fā)布Web服務(wù),包括添加依賴、創(chuàng)建XSD文件、生成JAXB實體、配置Endpoint、啟動服務(wù)等步驟,結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-11-11java實現(xiàn)動態(tài)上傳多個文件并解決文件重名問題
這篇文章主要為大家詳細介紹了java實現(xiàn)動態(tài)上傳多個文件,并解決文件重名問題的方法,感興趣的小伙伴們可以參考一下2016-03-03Lombok如何快速構(gòu)建JavaBean與日志輸出
這篇文章主要介紹了Lombok如何快速構(gòu)建JavaBean與日志輸出,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03