java將數(shù)字價(jià)格轉(zhuǎn)換為中文大寫(xiě)代碼示例(工具類(lèi))
在Java中,將數(shù)字價(jià)格轉(zhuǎn)換為中文大寫(xiě)通常涉及幾個(gè)步驟,包括將數(shù)字分解為各個(gè)部分(如個(gè)位、十位、百位等),然后根據(jù)這些部分轉(zhuǎn)換為對(duì)應(yīng)的中文大寫(xiě)數(shù)字,并添加適當(dāng)?shù)膯挝唬ㄈ缭?、角、分)?/p>
以下是一個(gè)示例方法,它接受一個(gè)BigDecimal類(lèi)型的價(jià)格(單位為元,包含小數(shù)點(diǎn)后兩位),并將其轉(zhuǎn)換為中文大寫(xiě)形式:
import java.math.BigDecimal;
public class PriceConverter {
private static final String[] CHINESE_NUMBERS = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"};
private static final String[] UNITS = {"", "拾", "佰", "仟"};
private static final String[] BIG_UNITS = {"", "萬(wàn)", "億", "兆", "京", "垓", "秭", "穰", "溝", "澗", "正", "載", "極"}; // 根據(jù)需要可以增加更多大單位
public static String convertToChinese(BigDecimal price) {
if (price == null || price.compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException("價(jià)格不能為空或小于0");
}
// 轉(zhuǎn)換為字符串并截取小數(shù)點(diǎn)前后部分
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ù)字后面、單位變化處或字符串開(kāi)始處添加一個(gè)零
if (sb.length() > 0 && (sb.charAt(sb.length() - 1) != CHINESE_NUMBERS[0].charAt(0) || unitIndex == 0 || i == 0)) {
sb.insert(0, chineseDigit);
}
} else {
// 添加非零數(shù)字和對(duì)應(yīng)單位
sb.insert(0, chineseDigit + units[unitIndex]);
// zeroCount = 0; // 重置連續(xù)零的計(jì)數(shù)
}
// 切換到下一個(gè)單位
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"))); // 肆佰伍拾肆穰伍仟肆佰肆拾肆秭肆仟肆佰肆拾壹垓壹仟壹佰壹拾肆京壹仟貳佰叁拾叁兆壹仟貳佰叁拾伍億貳仟貳佰貳拾壹萬(wàn)貳仟叁佰肆拾伍元陸角柒分
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)換為中文大寫(xiě)金額
將輸入的數(shù)字字符串中的每一個(gè)數(shù)字字符轉(zhuǎn)換為對(duì)應(yīng)的中文大寫(xiě),例如12345轉(zhuǎn)換為壹貳叁肆伍,再將此中文大寫(xiě)和對(duì)應(yīng)的單位進(jìn)行字符串的拼接并一起輸出
輸出結(jié)果為:零佰零拾壹萬(wàn)貳仟叁佰肆拾伍元
package com.ithm.stringdemo;
import java.util.Scanner;
public class Demo1 {
//獲取每一個(gè)數(shù)字對(duì)應(yīng)的中文大寫(xiě)
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("請(qǐng)輸入任意金額:");
money=sc.nextInt();
if(money>=0 ||money<=9999999) {
break;
}else {
System.out.println("金額無(wú)效,請(qǐng)重新輸入");
}
}
String capmoney="";
int i=0;
while (true){
int ge=money%10;
sz[i++]=ge;
money=money/10;
if(money==0) break;
}
//獲取大寫(xiě)數(shù)字的字符串
String capitalnumber="";
for (int j = 0; j < sz.length; j++) {
capitalnumber=getCapitalNumber(sz[j]);
capmoney=capitalnumber+capmoney;
}
//定義一個(gè)字符串?dāng)?shù)組存放單位
String []arr={"佰","拾","萬(wàn)","仟","佰","拾","元"};
//將大寫(xiě)數(shù)字和單位數(shù)組進(jìn)行字符串的拼接
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ù)字價(jià)格轉(zhuǎn)換為中文大寫(xiě)的文章就介紹到這了,更多相關(guān)java數(shù)字價(jià)格轉(zhuǎn)換中文大寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JAVA實(shí)現(xiàn)數(shù)字大寫(xiě)金額轉(zhuǎn)換的方法
- java實(shí)現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫(xiě)
- java實(shí)現(xiàn)數(shù)字轉(zhuǎn)大寫(xiě)的方法
- Java將數(shù)字金額轉(zhuǎn)為大寫(xiě)中文金額
- java實(shí)現(xiàn)統(tǒng)計(jì)字符串中大寫(xiě)字母,小寫(xiě)字母及數(shù)字出現(xiàn)次數(shù)的方法示例
- Java數(shù)字轉(zhuǎn)中文大寫(xiě)工具類(lèi)詳細(xì)代碼(拿去即用)
- java實(shí)現(xiàn)數(shù)字轉(zhuǎn)換人民幣中文大寫(xiě)工具
相關(guān)文章
SpringBoot+Vue實(shí)現(xiàn)SM4加密傳輸
本文主要介紹了SpringBoot+Vue實(shí)現(xiàn)SM4加密傳輸,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-02-02
Java?HashTable與Collections.synchronizedMap源碼深入解析
HashTable是jdk?1.0中引入的產(chǎn)物,基本上現(xiàn)在很少使用了,但是會(huì)在面試中經(jīng)常被問(wèn)到。本文就來(lái)帶大家一起深入了解一下Hashtable,需要的可以參考一下2022-11-11
MybatisPlus #{param}和${param}的用法詳解
這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
java~springboot~ibatis數(shù)組in查詢(xún)的實(shí)現(xiàn)方法
這篇文章主要介紹了java~springboot~ibatis數(shù)組in查詢(xún)的實(shí)現(xiàn)方法,需要的朋友可以參考下2018-09-09
Mybatis注解方式操作Oracle數(shù)據(jù)庫(kù)詳解
這篇文章主要介紹了Mybatis注解方式操作Oracle數(shù)據(jù)庫(kù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Vert.x學(xué)習(xí)之Resilience4j原理與用法解讀
Resilience4j通過(guò)獨(dú)立線程和異步控制機(jī)制,為Vert.x提供了強(qiáng)大的容錯(cuò)能力,包括斷路器、重試、限流和超時(shí)控制,確保系統(tǒng)在面對(duì)故障時(shí)仍能穩(wěn)定運(yùn)行2026-01-01

