最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java將數字價格轉換為中文大寫代碼示例(工具類)

 更新時間:2024年10月29日 10:17:49   作者:Jason_boy5  
這篇文章主要介紹了java將數字價格轉換為中文大寫的相關資料,在Java中實現將數字價格轉換為中文大寫需要將數字分解為各個部分(如個位、十位、百位等),并根據這些部分轉換為對應的中文大寫數字,需要的朋友可以參考下

在Java中,將數字價格轉換為中文大寫通常涉及幾個步驟,包括將數字分解為各個部分(如個位、十位、百位等),然后根據這些部分轉換為對應的中文大寫數字,并添加適當的單位(如元、角、分)。

以下是一個示例方法,它接受一個BigDecimal類型的價格(單位為元,包含小數點后兩位),并將其轉換為中文大寫形式:

import java.math.BigDecimal;

public class PriceConverter {

    private static final String[] CHINESE_NUMBERS = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"};
    private static final String[] UNITS = {"", "拾", "佰", "仟"};
    private static final String[] BIG_UNITS = {"", "萬", "億", "兆", "京", "垓", "秭", "穰", "溝", "澗", "正", "載", "極"}; // 根據需要可以增加更多大單位

    public static String convertToChinese(BigDecimal price) {
        if (price == null || price.compareTo(BigDecimal.ZERO) < 0) {
            throw new IllegalArgumentException("價格不能為空或小于0");
        }

        // 轉換為字符串并截取小數點前后部分
        String priceStr = price.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString();
        String integerPart = priceStr.split("\\.")[0]; // 整數部分
        String decimalPart = priceStr.split("\\.")[1]; // 小數部分(角、分)

        // 處理整數部分
        String integerChinese = convertToChinesePart(integerPart, UNITS, BIG_UNITS);

        // 處理小數部分
        String decimalChinese = "";
        if (!"00".equals(decimalPart)) {
            decimalChinese = convertToDecimalChinese(decimalPart);
        }

        // 合并結果
        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ù)零的處理:只在非零數字后面、單位變化處或字符串開始處添加一個零
                if (sb.length() > 0 && (sb.charAt(sb.length() - 1) != CHINESE_NUMBERS[0].charAt(0) || unitIndex == 0 || i == 0)) {
                    sb.insert(0, chineseDigit);
                }
            } else {
                // 添加非零數字和對應單位
                sb.insert(0, chineseDigit + units[unitIndex]);
//                zeroCount = 0; // 重置連續(xù)零的計數
            }

            // 切換到下一個單位
            if (++unitIndex == units.length) {
                unitIndex = 0; // 循環(huán)使用單位數組
                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將輸入的數字金額轉換為中文大寫金額

將輸入的數字字符串中的每一個數字字符轉換為對應的中文大寫,例如12345轉換為壹貳叁肆伍,再將此中文大寫和對應的單位進行字符串的拼接并一起輸出

輸出結果為:零佰零拾壹萬貳仟叁佰肆拾伍元

package com.ithm.stringdemo;
import java.util.Scanner;
 
public class Demo1 {
    //獲取每一個數字對應的中文大寫
    public static String getCapitalNumber(int number){
        String []capitalnumber={"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"};
        return capitalnumber[number];
    }
    public static void main(String[] args) {
        //數組里面放入輸入的金額的每一位數字
        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;
       }
       //獲取大寫數字的字符串
        String capitalnumber="";
        for (int j = 0; j < sz.length; j++) {
            capitalnumber=getCapitalNumber(sz[j]);
            capmoney=capitalnumber+capmoney;
        }
        //定義一個字符串數組存放單位
        String []arr={"佰","拾","萬","仟","佰","拾","元"};
        //將大寫數字和單位數組進行字符串的拼接
        String result="";
        for (int k = 0; k < capmoney.length(); k++) {
            char c=capmoney.charAt(k);
            result=result+c+arr[k];
        }
        System.out.println(result);
    }
}

總結 

到此這篇關于java將數字價格轉換為中文大寫的文章就介紹到這了,更多相關java數字價格轉換中文大寫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot+Vue實現SM4加密傳輸

    SpringBoot+Vue實現SM4加密傳輸

    本文主要介紹了SpringBoot+Vue實現SM4加密傳輸,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-02-02
  • Java?HashTable與Collections.synchronizedMap源碼深入解析

    Java?HashTable與Collections.synchronizedMap源碼深入解析

    HashTable是jdk?1.0中引入的產物,基本上現在很少使用了,但是會在面試中經常被問到。本文就來帶大家一起深入了解一下Hashtable,需要的可以參考一下
    2022-11-11
  • Java中線程Thread的三種方式和對比

    Java中線程Thread的三種方式和對比

    這篇文章主要介紹了Java中線程Thread的三種方式和對比,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Java中的ArrayList集合源碼解析

    Java中的ArrayList集合源碼解析

    這篇文章主要介紹了Java中的ArrayList集合源碼解析,ArrayList是一種以數組實現的List,與數組相比,它具有動態(tài)擴展的能力,因此也可稱之為動態(tài)數組,需要的朋友可以參考下
    2023-12-12
  • Java mybatis-plus詳解

    Java mybatis-plus詳解

    MyBatis-Plus是一個MyBatis的增強工具,在MyBatis的基礎上只做增強不做修改,為簡化開發(fā)、提高效率而生,本文給大家詳細講解一下MyBatis-Plus,需要的朋友參考下吧
    2021-09-09
  • MybatisPlus #{param}和${param}的用法詳解

    MybatisPlus #{param}和${param}的用法詳解

    這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • java~springboot~ibatis數組in查詢的實現方法

    java~springboot~ibatis數組in查詢的實現方法

    這篇文章主要介紹了java~springboot~ibatis數組in查詢的實現方法,需要的朋友可以參考下
    2018-09-09
  • JVM致命錯誤日志詳解(最新推薦)

    JVM致命錯誤日志詳解(最新推薦)

    這篇文章主要介紹了JVM致命錯誤日志詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Mybatis注解方式操作Oracle數據庫詳解

    Mybatis注解方式操作Oracle數據庫詳解

    這篇文章主要介紹了Mybatis注解方式操作Oracle數據庫詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vert.x學習之Resilience4j原理與用法解讀

    Vert.x學習之Resilience4j原理與用法解讀

    Resilience4j通過獨立線程和異步控制機制,為Vert.x提供了強大的容錯能力,包括斷路器、重試、限流和超時控制,確保系統(tǒng)在面對故障時仍能穩(wěn)定運行
    2026-01-01

最新評論

正阳县| 文登市| 博爱县| 全州县| 华坪县| 昌乐县| 祥云县| 西贡区| 建宁县| 宁陵县| 铜陵市| 新巴尔虎左旗| 酉阳| 长阳| 贵州省| 普宁市| 大丰市| 大同市| 施秉县| 马尔康县| 白河县| 聂拉木县| 郴州市| 萝北县| 独山县| 丹巴县| 龙泉市| 泾阳县| 江西省| 凤庆县| 肇州县| 潮安县| 潞城市| 德保县| 任丘市| 炎陵县| 平凉市| 鄂尔多斯市| 格尔木市| 西畴县| 和龙市|