1.20 实例:数字转人民币读法
生活随笔
收集整理的這篇文章主要介紹了
1.20 实例:数字转人民币读法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本節講解在實際開發中常用的一個方法:將一個浮點數轉換成人民幣讀法字符串,這個程序就需要使用數組。
實現這個方法的思路是,首先把這個浮點數分成整數部分和小數部分。提取整數部分很容易,直接將這個浮點數強制類型轉換成一個整數即可,這個整數就是浮點數的整數部分。再使用浮點數減去整數將可以得到這個浮點數的小數部分。
然后分開處理整數部分和小數部分,其中小數部分的處理比較簡單,直接截斷到保留 2 位數字,轉換成幾角幾分的字符串。整數部分的處理則稍微復雜一點,但只要認真分析不難發現,中國的數字習慣是 4 位一節的,一個 4 位的數字可被轉成幾千幾百幾十幾,至于后面添加什么單位則不確定:
如果這節 4 位數字出現在 1~4 位,則后面添加單位元。
如果這節 4 位數字出現在 5~8 位,則后面添加單位萬。
如果這節 4 位數字出現在 9~12 位,則后面添加單位億。
多于 12 位就暫不考慮了。
因此實現這個程序的關鍵就是把一個 4 位整數的浮點數轉換成一個中文讀法。下面程序把這個需求實現了一部分。
import java.util.Arrays; import java.util.Scanner; public class NumRmb {private String[] hanArr = { "零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖" };private String[] unitArr = { "十", "百", "千" };private String[] unitArr2 = { "分", "角" };/*** 把一個浮點數分解成整數部分和小數部分字符串** @param num 需要被分解的浮點數* @return 分解出來的整數部分和小數部分。第一個數組元素是整數部分,笫二個數組元素是小數部分*/private String[] divide(double num) {// 將一個浮點數強制類型轉換為long型,即得到它的整數部分long zheng = (long) num;// 浮點數減去整數部分,得到小數部分,小數部分乘以100后再取整得到2位小數long xiao = Math.round((num - zheng) * 100);// 下面用了2種方法把整數轉換為字符串return new String[] { zheng + "", String.valueOf(xiao) };}/*** 將數字轉成人民幣讀法** @param str[] 被分解成整數部分和小數部分的字符串數組* @return 人民幣讀法的漢字字符串*/private String toHanStr(String str[]) {int zhengLen = str[0].trim().split("").length; // 整數的長度int xiaoLen = str[1].split("").length; // 小數的長度String result = "";// 依次遍歷整數的每一位數字for (int i = 0; i < zhengLen; i++) {// 把char型數字轉換成int型數字,3 種方法如下:// 方法1:因為它們的ASCII碼值恰好相差48,因此把char型數字減去48得到int型數字,例如‘4’被轉換成4// int num = str[0].charAt(i) - 48;// 方法2:先將char型數字轉換為String字符串,再用Integer(int的包裝類,提供了String轉換為int的方法,后面教程中我們會詳細講解)轉換為int型數字// int num = Integer.parseInt(String.valueOf(str[0].charAt(i)));// 方法3:char型數字減去字符0來轉換為int型數字int num = str[0].charAt(i) - '0';// 如果不是最后一位數字,而且數字不是零,則需要添加單位(千、百、十)if (i != zhengLen - 1 && num != 0) {result += hanArr[num] + unitArr[zhengLen - 2 - i];} else {// 否則添加“元”result += hanArr[num] + "元";}}// 依次遍歷小數的每一位數字for (int i = 0; i < xiaoLen; i++) {int num = str[1].charAt(i) - '0';// 如果數字不是零,則需要添加單位(角,分)if (num != 0) {result += hanArr[num] + unitArr2[xiaoLen - 1 - i];}}return result;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);NumRmb nr = new NumRmb();System.out.println("請輸入一個浮點數:");String num = sc.next();String[] strs = nr.divide(Double.parseDouble(num));System.out.println("分解成整數部分和小數部分結果為:" + Arrays.toString(strs));System.out.println("人民幣讀法為:" + nr.toHanStr(strs));} }運行結果:
請輸入一個浮點數: 12.3 分解成整數部分和小數部分結果為:[12, 30] 人民幣讀法為:壹十貳元叁角總結
以上是生活随笔為你收集整理的1.20 实例:数字转人民币读法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.19 实例:Java求数组元素的最大
- 下一篇: 1.23 实例:五子棋游戏