Java實現中文金額轉換

概述

  • 話不多說,直接上代碼

代碼

/*** @Author: hweiyu* @Description: TODO* @Date: 2025/5/23 11:33*/
import java.math.BigDecimal;
import java.util.Scanner;public class AmountToChinese {// 中文數字字符private static final String[] NUMBERS = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"};// 單位private static final String[] UNITS = {"", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟"};// 小數部分單位private static final String[] DECIMAL_UNITS = {"角", "分"};public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("請輸入金額(支持兩位小數):");String amountStr = scanner.nextLine();scanner.close();try {String chineseAmount = convertToChinese(amountStr);System.out.println("中文大寫:" + chineseAmount);} catch (IllegalArgumentException e) {System.out.println("輸入錯誤:" + e.getMessage());}}public static String convertToChinese(String amountStr) {// 檢查輸入是否為空if (amountStr == null || amountStr.trim().isEmpty()) {throw new IllegalArgumentException("金額不能為空");}// 移除所有空格amountStr = amountStr.trim().replaceAll("\\s+", "");// 驗證金額格式if (!amountStr.matches("^\\d+(\\.\\d{1,2})?$")) {throw new IllegalArgumentException("金額格式不正確,最多支持兩位小數");}// 處理零元的情況if (amountStr.equals("0") || amountStr.equals("0.0") || amountStr.equals("0.00")) {return "零元整";}// 分割整數和小數部分String[] parts = amountStr.split("\\.");String integerPart = parts[0];String decimalPart = parts.length > 1 ? parts[1] : "";// 處理小數部分(補齊兩位)if (decimalPart.length() == 1) {decimalPart += "0";} else if (decimalPart.length() > 2) {decimalPart = decimalPart.substring(0, 2);}StringBuilder result = new StringBuilder();// 處理整數部分if (!integerPart.equals("0")) {result.append(convertIntegerPart(integerPart));result.append("元");}// 處理小數部分if (!decimalPart.isEmpty() && !decimalPart.equals("00")) {result.append(convertDecimalPart(decimalPart));} else {result.append("整");}return result.toString();}private static String convertIntegerPart(String integerPart) {StringBuilder result = new StringBuilder();int length = integerPart.length();for (int i = 0; i < length; i++) {int digit = integerPart.charAt(i) - '0';int position = length - i - 1;// 處理零的情況if (digit == 0) {// 當前位為零,且下一位不為零,添加"零"if (i < length - 1 && integerPart.charAt(i + 1) != '0' &&!result.toString().endsWith("零")) {result.append("零");}// 處理萬億、億、萬的單位if (position % 4 == 0) {result.append(UNITS[position]);}} else {result.append(NUMBERS[digit]);result.append(UNITS[position]);}}// 處理特殊情況,如"壹拾"簡化為"拾"String resultStr = result.toString();if (resultStr.startsWith("壹拾") && resultStr.length() > 2) {resultStr = resultStr.substring(1);}return resultStr;}private static String convertDecimalPart(String decimalPart) {StringBuilder result = new StringBuilder();int jiao = decimalPart.charAt(0) - '0';int fen = decimalPart.charAt(1) - '0';if (jiao != 0) {result.append(NUMBERS[jiao]).append(DECIMAL_UNITS[0]);}if (fen != 0) {// 如果角為零,分不為零,需要添加"零"if (jiao == 0) {result.append("零");}result.append(NUMBERS[fen]).append(DECIMAL_UNITS[1]);}return result.toString();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81919.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle 的 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 命令

Oracle 的ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 命令 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 是 Oracle Data Guard 環境中用于停止恢復過程并準備備用數據庫切換為主庫的關鍵命令。 命令用途 該命令主要用于以下場景&#xff1a; 故…

Java 依賴管理工具:使用 Sonatype Nexus 管理項目依賴

Java 依賴管理工具&#xff1a;使用 Sonatype Nexus 管理項目依賴 在 Java 開發領域&#xff0c;依賴管理是項目構建和維護過程中的關鍵環節。Sonatype Nexus 作為一個功能強大的依賴管理工具&#xff0c;能夠有效地幫助我們管理項目的各種依賴&#xff0c;提高開發效率并降低…

編譯原理 期末速成

一、基本概念 1. 翻譯程序 vs 編譯程序 翻譯程序的三種方式 編譯&#xff1a;將高級語言編寫的源程序翻譯成等價的機器語言或匯編語言。&#xff08;生成文件&#xff0c;等價&#xff09;解釋&#xff1a;將高級語言編寫的源程序翻譯一句執行一句&#xff0c;不生成目標文件…

Pysnmp使用指南

1. 簡介 pysnmp 是一個純 Python 實現的 SNMP&#xff08;Simple Network Management Protocol&#xff09;庫&#xff0c;支持 SNMPv1、SNMPv2c 和 SNMPv3 協議。用于&#xff1a; 查詢&#xff08;GET&#xff09;和修改&#xff08;SET&#xff09;網絡設備的管理信息。遍…

SHELL編程簡介

1.腳本格式&#xff1a; 聲明位于shell腳本的行首&#xff0c;通常形式如下&#xff1a; #!/bin/sh#!/bin/bash 其中#表示注釋&#xff0c;!聲明所使用的shell&#xff0c;后面為所使用shell的絕對路徑。 2.常用函數 echo&#xff1a;shell輸出語句&#xff0c;可不接參數…

Django 中的 ORM 基礎語法

深入剖析 Django 中的 ORM 語法&#xff1a;從基礎到實戰進階 在 Django 開發領域&#xff0c;ORM&#xff08;對象關系映射&#xff09;是開發者高效操作數據庫的得力工具。它以簡潔直觀的 Python 代碼&#xff0c;替代繁瑣的 SQL 語句&#xff0c;極大提升了開發效率。本文將…

A10服務器使用vllm推理框架成功運行Qwen3大模型

1.下載Qwen3大模型&#xff1a; git clone https://www.modelscope.cn/Qwen/Qwen3-1.7B.git放在服務器的/mnt/workspace/Qwen3-1.7B目錄下。 2.創建python虛擬環境&#xff1a; python3 -m venv venv1 source venv1/bin/activate3.安裝vllm推理框架 pip install vllm 4.啟動…

Disruptor—1.原理和使用簡介

大綱 1.Disruptor簡介 2.Disruptor和BlockingQueue的壓測對比 3.Disruptor的編程模型 4.Disruptor的數據結構與生產消費模型 5.RingBuffer Disruptor Sequence相關類 6.Disruptor的WaitStrategy消費者等待策略 7.EventProcessor EventHandler等類 8.Disruptor的運行…

谷歌瀏覽器調試python pygui程序

谷歌瀏覽器地址:chrome://inspect/#devices 前端vue為8080, 配置如下 pychat 需要配置環境變量 PYTHONUNBUFFERED1;QTWEBENGINE_REMOTE_DEBUGGING9012

手寫Tomcat(二)—Tomcat簡化模型架構

一、 Tomcat架構 Tomcat的主要角色是 servlet容器&#xff0c;提供一個解釋器&#xff0c;能夠解析并執行JavaScript Object Notation (JON)腳本&#xff08;后更改為Servlet&#xff09;&#xff0c;并將請求傳送到指定的服務器&#xff08;如JavaBean&#xff09;。因此&…

Android 網絡全棧攻略(五)—— 從 OkHttp 攔截器來看 HTTP 協議二

上一篇我們介紹了 OkHttp 的責任鏈以及第一個內置攔截器 —— 重試與重定向攔截器。本篇我們將剩余四個攔截器的解析做完。 1、橋接攔截器 BridgeInterceptor 作為請求準備和實際發送之間的橋梁&#xff0c;自動處理 HTTP 請求頭等繁瑣工作。比如設置請求內容長度&#xff0c…

JDBC-java操作數據庫

1.基本結構&#xff1a; package com.atguigu.servlets;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class JDBCemo {public static void main(String[] args) throws Exception{String url "jdbc:mysql:///mysql&qu…

七彩喜適老化改造:讓每個空間成為長者尊嚴的守護者

隨著我國老齡化進程的加速&#xff0c;居家養老逐漸成為老年人首選的生活方式。 為了讓老年人能夠在熟悉的環境中安享晚年&#xff0c;適老化改造應運而生。 七彩喜作為居家養老服務的創新者&#xff0c;致力于通過科學設計和人性化改造&#xff0c;為老年人提供安全、舒適、…

【動態規劃】5 從一次函數出發推導斜率優化dp

背景 基于例題《任務安排》逐步推導進行斜率優化。 引入 例題&#xff1a;P2365 任務安排 考慮動態規劃。使用 d p i , j dp_{i,j} dpi,j? 表示前 i i i 個任務分了 j j j 段的最小費用。 顯然&#xff0c;有 d p i , j min ? k 1 i ? 1 ( d p i , j , d p k , j…

MySQL中實現大數據量的快速插入

一、SQL語句優化? 1. ?批量插入代替單條插入? ?單條插入會頻繁觸發事務提交和日志寫入&#xff0c;效率極低。?批量插入通過合并多條數據為一條SQL語句&#xff0c;減少網絡傳輸和SQL解析開銷。 -- 低效寫法&#xff1a;逐條插入 INSERT INTO table (col1, col2) VALUE…

C++23中std::span和std::basic_string_view可平凡復制提案解析

文章目錄 一、引言二、相關概念解釋2.1 平凡復制&#xff08;Trivially Copyable&#xff09;2.2 std::span2.3 std::basic_string_view 三、std::span和std::basic_string_view的應用場景3.1 std::span的應用場景3.2 std::basic_string_view的應用場景 四、P2251R1提案對std::…

廣東省省考備考(第十八天5.23)—言語:語句填空題(聽課后強化訓練)

錯題 解析 橫線出現在文段中間&#xff0c;需結合上下文內容進行分析。文段開篇指出逃離北上廣深的話題時而出現&#xff0c;一些人離開大城市回到小城市。隨后通過轉折詞“但”引出橫線內容&#xff0c;且結合橫線后人才傾向于向更發達的地方流動的內容&#xff0c;橫線處應體…

持續更新 ,GPT-4o 風格提示詞案例大全!附使用方式

本文匯集了各類4o風格提示詞的精選案例&#xff0c;從基礎指令到復雜任務&#xff0c;從創意寫作到專業領域&#xff0c;為您提供全方位的參考和靈感。我們將持續更新這份案例集&#xff0c;確保您始終能夠獲取最新、最有效的提示詞技巧。 讓我們一起探索如何通過精心設計的提…

創建型:建造者模式

目錄 1、核心思想 2、實現方式 2.1 模式結構 2.2 工作流程 2.3 實現案例 2.4 變體&#xff1a;鏈式建造者&#xff08;常見于多參數對象&#xff0c;無需指揮者&#xff09; 3、優缺點分析 4、適用場景 1、核心思想 目的&#xff1a;將復雜對象的構建過程與其表示分離…

力扣-長度最小的子數組

1.題目描述 2.題目鏈接 LCR 008. 長度最小的子數組 - 力扣&#xff08;LeetCode&#xff09; 3.題目分析 這道題目我們使用的也是雙指針。我們可以定義兩個指針都指向數組第一個元素&#xff0c;然后使用right指針遍歷原數組&#xff0c;計算left指針到right指針之間的所有元…