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

Java實(shí)現(xiàn)數(shù)字金額轉(zhuǎn)化為英文金額功能

 更新時(shí)間:2025年03月23日 08:26:20   作者:牛肉胡辣湯  
在處理財(cái)務(wù)數(shù)據(jù)時(shí),有時(shí)需要將數(shù)字形式的金額轉(zhuǎn)換成英文描述的形式,比如在生成正式文件或發(fā)票時(shí),本文將介紹如何使用Java實(shí)現(xiàn)這一功能,需要的朋友可以參考下

1. 需求分析

假設(shè)我們需要一個(gè)方法,輸入一個(gè)double類型的數(shù)值(代表金額),輸出其對(duì)應(yīng)的英文表述。例如,輸入??123456.78??,輸出應(yīng)為??One Hundred Twenty Three Thousand Four Hundred Fifty Six Dollars and Seventy Eight Cents??。

2. 技術(shù)選型

  • 編程語言:Java
  • 開發(fā)工具:IntelliJ IDEA
  • 測試工具:JUnit

3. 實(shí)現(xiàn)思路

3.1 分解數(shù)字

首先,將數(shù)字分解成整數(shù)部分和小數(shù)部分。對(duì)于整數(shù)部分,按照千位分組,每組分別轉(zhuǎn)換成英文;對(duì)于小數(shù)部分,直接轉(zhuǎn)換成英文。

3.2 數(shù)字到英文的映射

創(chuàng)建兩個(gè)數(shù)組,分別存儲(chǔ)0-19和20-90的英文表示,以及一個(gè)字符串?dāng)?shù)組存儲(chǔ)千、百萬等單位的英文表示。

3.3 轉(zhuǎn)換邏輯

  • 對(duì)于小于20的數(shù),直接從數(shù)組中獲取英文表示。
  • 對(duì)于20到99之間的數(shù),先處理十位,再處理個(gè)位。
  • 對(duì)于100以上的數(shù),遞歸地處理百位及以上的部分。

4. 代碼實(shí)現(xiàn)

public class NumberToWordsConverter {
 
    private static final String[] LESS_THAN_20 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
    private static final String[] TENS = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
    private static final String[] THOUSANDS = {"", "Thousand", "Million", "Billion"};
 
    public String numberToWords(int num) {
        if (num == 0) return "Zero";
        int i = 0;
        String words = "";
        while (num > 0) {
            if (num % 1000 != 0) {
                words = helper(num % 1000) + THOUSANDS[i] + " " + words;
            }
            num /= 1000;
            i++;
        }
        return words.trim();
    }
 
    private String helper(int num) {
        if (num == 0) return "";
        else if (num < 20) return LESS_THAN_20[num] + " ";
        else if (num < 100) return TENS[num / 10] + " " + helper(num % 10);
        else return LESS_THAN_20[num / 100] + " Hundred " + helper(num % 100);
    }
 
    public String convert(double amount) {
        long integerPart = (long) amount;
        double decimalPart = amount - integerPart;
 
        String integerWords = numberToWords((int) integerPart);
        String decimalWords = numberToWords((int) (decimalPart * 100));
 
        return integerWords + " Dollars and " + decimalWords + " Cents";
    }
}

5. 測試

為了確保我們的轉(zhuǎn)換功能正確無誤,可以編寫一些單元測試來驗(yàn)證:

import org.junit.Test;
import static org.junit.Assert.assertEquals;
 
public class NumberToWordsConverterTest {
    @Test
    public void testConvert() {
        NumberToWordsConverter converter = new NumberToWordsConverter();
        assertEquals("One Hundred Twenty Three Thousand Four Hundred Fifty Six Dollars and Seventy Eight Cents",
                     converter.convert(123456.78));
        assertEquals("One Dollar and Twenty Three Cents",
                     converter.convert(1.23));
        assertEquals("Zero Dollars and Zero Cents",
                     converter.convert(0.00));
    }
}

我們成功實(shí)現(xiàn)了將數(shù)字金額轉(zhuǎn)換為英文描述的功能。這個(gè)功能在實(shí)際應(yīng)用中非常有用,特別是在處理國際化的財(cái)務(wù)系統(tǒng)時(shí)。應(yīng)用中,將數(shù)字金額轉(zhuǎn)換為英文金額的需求常見于銀行系統(tǒng)、財(cái)務(wù)軟件等場景。這種功能通常用于生成正式的財(cái)務(wù)文件,如支票、發(fā)票等,以確保金額的準(zhǔn)確性和防篡改性。

下面是一個(gè)簡單的Java示例代碼,展示如何將數(shù)字金額(例如123456.78)轉(zhuǎn)換為英文金額(例如"One Hundred Twenty Three Thousand Four Hundred Fifty Six Dollars and Seventy Eight Cents")。這個(gè)示例使用了基本的字符串處理和數(shù)組映射來實(shí)現(xiàn)轉(zhuǎn)換邏輯。

import java.util.HashMap;
import java.util.Map;
 
public class NumberToWordsConverter {
 
    private static final String[] unitsMap = {
        "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
        "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"
    };
 
    private static final String[] tensMap = {
        "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"
    };
 
    private static final Map<Long, String> thousandsMap = new HashMap<>();
    static {
        thousandsMap.put(1000000000L, "Billion");
        thousandsMap.put(1000000L, "Million");
        thousandsMap.put(1000L, "Thousand");
        thousandsMap.put(1L, "");
    }
 
    public static void main(String[] args) {
        double amount = 123456.78;
        System.out.println("Amount in words: " + convertNumberToWords(amount));
    }
 
    public static String convertNumberToWords(double number) {
        long integerPart = (long) number;
        int decimalPart = (int) Math.round((number - integerPart) * 100);
        StringBuilder result = new StringBuilder();
 
        if (integerPart == 0) {
            result.append("Zero Dollars");
        } else {
            result.append(convertLessThanOneThousand(integerPart)).append(" Dollars");
        }
 
        if (decimalPart > 0) {
            result.append(" and ").append(convertLessThanOneThousand(decimalPart)).append(" Cents");
        }
 
        return result.toString().trim();
    }
 
    private static String convertLessThanOneThousand(long number) {
        if (number % 100 < 20) {
            return unitsMap[(int) number % 100];
        } else {
            return tensMap[(int) (number % 100 / 10)] + " " + unitsMap[(int) (number % 10)];
        }
    }
 
    private static String convert(long number) {
        if (number == 0) {
            return "";
        }
 
        for (Map.Entry<Long, String> entry : thousandsMap.entrySet()) {
            if (number >= entry.getKey()) {
                return convert(number / entry.getKey()) + " " + entry.getValue() + " " + convert(number % entry.getKey());
            }
        }
        return "";
    }
}

代碼解釋:

  1. unitsMap 和 tensMap:這兩個(gè)數(shù)組分別存儲(chǔ)了個(gè)位數(shù)和十位數(shù)的英文表示。
  2. thousandsMap:這是一個(gè)哈希表,用于存儲(chǔ)千位以上的單位(如Thousand, Million, Billion)。
  3. convertNumberToWords:這是主函數(shù),負(fù)責(zé)將數(shù)字金額轉(zhuǎn)換為英文表示。它首先處理整數(shù)部分,然后處理小數(shù)部分。
  4. convertLessThanOneThousand:這個(gè)輔助函數(shù)用于將小于1000的數(shù)字轉(zhuǎn)換為英文。
  5. convert:這個(gè)遞歸函數(shù)用于處理大于1000的數(shù)字,并根據(jù)千位單位進(jìn)行分割。

通過上述代碼,你可以將任何有效的數(shù)字金額轉(zhuǎn)換為其對(duì)應(yīng)的英文表示形式。將Java中的數(shù)字金額轉(zhuǎn)換為英文金額是一個(gè)常見的需求,尤其是在處理財(cái)務(wù)報(bào)告、發(fā)票等需要精確表示金額的場景中。下面我將詳細(xì)介紹如何在Java中實(shí)現(xiàn)這一功能。

實(shí)現(xiàn)思路

  1. 拆分整數(shù)部分和小數(shù)部分:首先,將輸入的金額字符串按照小數(shù)點(diǎn)拆分為整數(shù)部分和小數(shù)部分。
  2. 定義數(shù)字和單位的映射:創(chuàng)建一個(gè)映射,將數(shù)字0-19以及100、1000、1000000等特殊單位映射到英文單詞。
  3. 處理整數(shù)部分:遞歸地將整數(shù)部分轉(zhuǎn)換為英文單詞。
  4. 處理小數(shù)部分:直接將小數(shù)部分的兩個(gè)數(shù)字轉(zhuǎn)換為英文單詞。
  5. 組合結(jié)果:將整數(shù)部分和小數(shù)部分的英文單詞組合起來,形成最終的英文金額表示。

代碼實(shí)現(xiàn)

import java.util.HashMap;
import java.util.Map;
 
public class NumberToWordsConverter {
 
    private static final String[] LESS_THAN_20 = {
        "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", 
        "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"
    };
 
    private static final String[] TENS = {
        "", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"
    };
 
    private static final String[] THOUSANDS = {
        "", "Thousand", "Million", "Billion"
    };
 
    public static String numberToWords(int num) {
        if (num == 0) return "Zero";
 
        int i = 0;
        String words = "";
 
        while (num > 0) {
            if (num % 1000 != 0) {
                words = helper(num % 1000) + THOUSANDS[i] + " " + words;
            }
            num /= 1000;
            i++;
        }
 
        return words.trim();
    }
 
    private static String helper(int num) {
        if (num == 0) {
            return "";
        } else if (num < 20) {
            return LESS_THAN_20[num] + " ";
        } else if (num < 100) {
            return TENS[num / 10] + " " + helper(num % 10);
        } else {
            return LESS_THAN_20[num / 100] + " Hundred " + helper(num % 100);
        }
    }
 
    public static String convertAmountToWords(double amount) {
        long integerPart = (long) amount;
        int decimalPart = (int) ((amount - integerPart) * 100);
 
        String integerWords = numberToWords((int) integerPart);
        String decimalWords = numberToWords(decimalPart);
 
        return integerWords.trim() + " Dollars and " + decimalWords.trim() + " Cents";
    }
 
    public static void main(String[] args) {
        double amount = 1234.56;
        System.out.println(convertAmountToWords(amount));
    }
}

代碼解釋

  1. 常量定義
  • ??LESS_THAN_20??:包含0到19的英文單詞。
  • ??TENS??:包含10到90的英文單詞。
  • ??THOUSANDS??:包含千、百萬、十億等單位的英文單詞。
  1. numberToWords?方法
  • 將整數(shù)部分轉(zhuǎn)換為英文單詞。通過遞歸處理每個(gè)三位數(shù)的部分,并加上相應(yīng)的單位(千、百萬、十億)。
  1. helper?方法
  • 處理小于1000的數(shù)字,將其轉(zhuǎn)換為英文單詞。
  1. convertAmountToWords?方法
  • 將輸入的金額拆分為整數(shù)部分和小數(shù)部分。
  • 調(diào)用??numberToWords??方法分別將整數(shù)部分和小數(shù)部分轉(zhuǎn)換為英文單詞。
  • 組合結(jié)果,形成最終的英文金額表示。
  1. main?方法
  • 測試示例,將1234.56轉(zhuǎn)換為英文金額表示。

輸出結(jié)果

運(yùn)行上述代碼,輸出結(jié)果為:

One Thousand Two Hundred Thirty Four Dollars and Fifty Six Cents

這個(gè)實(shí)現(xiàn)可以處理大多數(shù)常見的金額轉(zhuǎn)換需求。如果需要處理更大的金額或更復(fù)雜的單位,可以進(jìn)一步擴(kuò)展和優(yōu)化。

到此這篇關(guān)于Java實(shí)現(xiàn)數(shù)字金額轉(zhuǎn)化為英文金額功能的文章就介紹到這了,更多相關(guān)Java數(shù)字金額轉(zhuǎn)英文金額內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JWT登錄認(rèn)證Springboot詳解

    JWT登錄認(rèn)證Springboot詳解

    文章主要介紹了如何在Java項(xiàng)目中使用JWT進(jìn)行用戶認(rèn)證和授權(quán),通過定義一個(gè)常量,編寫JWT工具類來生成和解析token,登錄時(shí)在服務(wù)端生成token并返回給客戶端,客戶端使用攔截器攔截請(qǐng)求,驗(yàn)證token的有效性,從而實(shí)現(xiàn)權(quán)限控制,文章旨在分享個(gè)人經(jīng)驗(yàn),為開發(fā)者提供參考
    2024-11-11
  • maven中倉庫的配置與優(yōu)先級(jí)的實(shí)現(xiàn)

    maven中倉庫的配置與優(yōu)先級(jí)的實(shí)現(xiàn)

    本文介紹Maven倉庫配置,包括settings.xml和pom.xml中的本地倉庫、鏡像及profile設(shè)置,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • Spring的事件和監(jiān)聽器-同步與異步詳解

    Spring的事件和監(jiān)聽器-同步與異步詳解

    這篇文章主要介紹了Spring的事件和監(jiān)聽器-同步與異步詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中的反射機(jī)制詳解

    Java中的反射機(jī)制詳解

    這篇文章主要介紹了JAVA 反射機(jī)制的相關(guān)知識(shí),文中講解的非常細(xì)致,代碼幫助大家更好的理解學(xué)習(xí),感興趣的朋友可以了解下
    2021-09-09
  • java實(shí)現(xiàn)udp通訊的代碼

    java實(shí)現(xiàn)udp通訊的代碼

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)udp通訊的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 自定義的Troop<T>泛型類( c++, java和c#)的實(shí)現(xiàn)代碼

    自定義的Troop<T>泛型類( c++, java和c#)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了自定義的Troop<T>泛型類( c++, java和c#)的實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 如何使用Lombok進(jìn)行spring?注入

    如何使用Lombok進(jìn)行spring?注入

    本文介紹如何用Lombok簡化Spring注入,推薦優(yōu)先使用setter注入,通過注解自動(dòng)生成getter/setter及構(gòu)造器,減少冗余代碼,提升開發(fā)效率,感興趣的朋友一起看看吧
    2025-07-07
  • Java中常用的設(shè)計(jì)模式之策略模式詳解

    Java中常用的設(shè)計(jì)模式之策略模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java中常用的設(shè)計(jì)模式之策略模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • JAVA-4NIO之Channel之間的數(shù)據(jù)傳輸方法

    JAVA-4NIO之Channel之間的數(shù)據(jù)傳輸方法

    下面小編就為大家?guī)硪黄狫AVA-4NIO之Channel之間的數(shù)據(jù)傳輸方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java高級(jí)之虛擬機(jī)加載機(jī)制的實(shí)例講解

    Java高級(jí)之虛擬機(jī)加載機(jī)制的實(shí)例講解

    下面小編就為大家分享一篇Java高級(jí)之虛擬機(jī)加載機(jī)制的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12

最新評(píng)論

常熟市| 类乌齐县| 射洪县| 玉林市| 泌阳县| 德格县| 寿宁县| 永嘉县| 德兴市| 南京市| 彭山县| 汕头市| 若尔盖县| 深泽县| 青田县| 宜宾市| 黔南| 武夷山市| 普安县| 林甸县| 安康市| 滁州市| 长阳| 博罗县| 科技| 清新县| 湖南省| 米脂县| 石景山区| 通州区| 聂拉木县| 青岛市| 石屏县| 巩义市| 攀枝花市| 滨海县| 河池市| 海宁市| 哈尔滨市| 江北区| 镇宁|