人民币转换(阿拉伯数字转为中文大写的人民币格式)
人民幣轉換
1、中文大寫金額數字前應標明“人民幣”字樣。中文大寫金額數字應用壹、貳、叁、肆、伍、陸、柒、捌、玖、拾、佰、仟、萬、億、元、角、分、零、整等字樣填寫。
2、中文大寫金額數字到“元”為止的,在“元”之后,應寫“整字,如¥?532.00應寫成“人民幣伍佰叁拾貳元整”。在”角“和”分“后面不寫”整字。
3、阿拉伯數字中間有“0”時,中文大寫要寫“零”字,阿拉伯數字中間連續有幾個“0”時,中文大寫金額中間只寫一個“零”字,如¥6007.14,應寫成“人民幣陸仟零柒元壹角肆分“。
輸入描述:
輸入一個double數
輸出描述:
輸出人民幣格式
示例1:
輸入
151121.15
輸出
人民幣拾伍萬壹仟壹佰貳拾壹元壹角伍分
特殊用例測試:
分析:
//字符串整數部分不超過13位
String[] numStrs = {"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"}; //存大寫的數字
String[] unitStrs1 = {"角","分"}; //小數部分的單位
String[] unitStrs2 = {"","拾","佰","仟"}; //整數部分的單位
String[] unitStrs3 = {"","萬","億","萬億"}; //整數部分的單位
將輸入以字符串形式接收(記為n,防止越界),結果用字符串result表示。
將字符串n以小數點分隔為兩部分,前一部分為整數部分,轉為數組記為chars,后一部分為小數部分,記為strs2.
1.小數部分:
(1)判斷字符串n是否為整數:小數部分長度為1時判斷這一位是否為0,長度為2時判斷兩位是否都為0,后面若還有輸入不計,若為整數,result += "整";
(2)非整數時遍歷字符串strs2(最多遍歷兩位),將對應的大寫數字+單位依次加入到result中,注意若角為0時直接不讀角(如:5.05為“伍元伍分”)
2.整數部分:
(1)判斷strs1是否長度為1且chars[0]='0',是則說明不用讀整數部分,不是則將“元”加入result中。(如:0.05為“伍分”)
(2)將strs1中的數反向讀取并四個為一組劃分,count記錄第幾組(從0開始),每次將這四個一組的數先轉換,單位對應unitStrs2 ,記錄在str中,而str對應的單位在unitStrs3中,即unitStrs3[count],將它們拼接到result中,即result = str + unitStrs3[count] + result;
(4)關于四位一組內部的數和對應單位,需要判斷,這個數是不是0,0的特殊情況:0在整數部分最后一位時不讀(10.05,人民幣拾元伍分);chars中的下一位為0時不讀(100.00,人民幣壹佰元整);連續中間有零時只讀一個,也就是在上一位已讀過,此時不讀(1001.00,人民幣壹仟零壹元整),當1出現在第一位且是十位時不讀1(防止11.00讀為壹拾壹元整)。
3.在result前加上人民幣并輸出。
代碼:
import java.util.*;public class Main {public static void main(String[] args) {//字符串長度整數部分不超過13位Scanner in = new Scanner(System.in);String[] numStrs = {"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"};String[] unitStrs1 = {"角","分"};String[] unitStrs2 = {"","拾","佰","仟"};String[] unitStrs3 = {"","萬","億","萬億"};while(in.hasNext()){String n = in.nextLine();if(n.split("\\.")[0].length() >13){System.out.println("字符串長度整數部分不超過13位");}String result = "";String strs2 =n.split("\\.")[1];//小數點之后if((strs2.length()==1 && strs2.charAt(0)=='0')||(strs2.length()>1&& strs2.charAt(0)=='0'&& strs2.charAt(1)=='0')){//整數result += "整";}else {//非整數for (int i = 0; i < Math.min(2, strs2.length()); i++) {int tmp = strs2.charAt(i) - '0';if (tmp != 0) {result += numStrs[tmp] + unitStrs1[i];}}}char[] chars = n.split("\\.")[0].toCharArray();//0元時不寫元if(!(chars.length == 1 && chars[0]=='0')){result = "元"+result;}//小數點之前int count = -1;for(int j=chars.length-1; j>=0;){//以四個為一組String str = "";for(int i=0; i<4 &&j>=0;i++){String num = numStrs[chars[j]-'0'];//當前位的數字if(num.equals("零")){//這個零不能出現在最后一位(10.05)//下一位不是零(100),連續中間有零時只讀一個(1001)if(chars.length-1-j != 0 && chars[j+1]!='0' && str.charAt(0)!='零'){str = num + str;}}else if(j==0 && i== 1 &&num.equals("壹")){//防止壹拾壹元等情況的出現str = unitStrs2[i] + str;}else{str = num + unitStrs2[i] + str;}j--;}count++;result = str + unitStrs3[count] + result;}result = "人民幣"+ result;System.out.println(result);}} }?
總結
以上是生活随笔為你收集整理的人民币转换(阿拉伯数字转为中文大写的人民币格式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mask RcNN论文翻译
- 下一篇: 数据库课程设计--公交车管理系统总结(Q