日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小写金额转为中文大写

發布時間:2024/1/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小写金额转为中文大写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標
將小寫的金額轉化為中文大寫,如99.99轉為“玖拾玖圓玖角玖分”
思路

  • 阿拉伯數字有對應的中文大寫,需要將其轉為中文大寫。
  • 金額分為小數部分和整數部分分別處理,整數部分和小數部分轉換完成后拼接在一起即完成轉換
  • 小數部分比較簡單,將阿拉伯數字轉為中文大寫后加上對應的單位即可,如0.22,2轉為貳,加上單位角,然后遞歸處理。
  • 整數部分小于4位時,單位為‘仟’,‘佰’,‘拾’,但是當位數大于四位時,在原有‘仟’,‘佰’,‘拾’的基礎上需要加上單位‘萬’,‘億’,‘兆’等,因此需要將整數部分按照4個數字分為一組,每組中的數字轉為大寫數字加上單位,而每組中需要加上對應的單位。如12345678,先分為:‘1234’,‘5678’兩組,‘1234’轉為‘壹仟貳佰叁拾肆’,‘5678’轉為‘伍仟陸佰柒拾捌’,然后在第一組后面加上單位‘萬’。
  • 整數部分轉換時需要考慮有0的情況:
    當有0時不用帶上單位’仟‘,’佰‘等,如708轉為’柒佰零捌’
    多個連續的0轉為大寫時只有一個零,如7008轉為‘柒仟零捌’。
    0在一組的末尾時省略’零‘,如780轉為’柒佰捌拾‘
    若一組內元素全為0,則省略組單位,’萬‘,’億‘等,如700001234轉為‘柒億零壹仟貳佰叁拾肆’。
  • 代碼

    function numToChar (num) {//將數字分為兩部分let parts = num.toString().split('.')let integer = parts[0] //整數部分let decimal = parts[1] //小數部分//記錄單位let decimalUnit = ['角', '分', '厘', '毫'];let baseUnit = ['仟', '佰', '拾', ''];let upUnit = ['萬', '億', '兆'];//記錄阿拉伯數字對應中文大寫let nums = ["零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"]//記錄結果值let res = ''//處理小數部分//如果不存在小數部分if (!decimal) {res += '整'}else{//去除小數部分后面的0,如900轉為9let end = decimal.length;for(let i = decimal.length - 1; i >= 0; i--){if (decimal[i] === '0') {end--;}else{break;}}decimal = decimal.substring(0, end);//若長度大于4,則輸入有誤if (decimal.length > 4) {alert('請確認輸入金額是否正確');return}//若小數部分的長度為0,則輸入值小數部分均為0if (decimal.length === 0) {res += '整'}//阿拉伯數字轉為中文大寫加上單位Array.from(decimal).forEach((value, index) => {if(!Number(value) === NaN) {alert('請確認輸入金額是否正確')return}res += nums[value] + decimalUnit[index];})}//處理整數部分//去除整數部分前面的0,如0090轉為90let index = 0;for (let i = 0; i < integer.length; i++) {if(integer[i] === '0') index = i+1;else break}integer = integer.substring(index);//整數部分只有0的情況if (!integer.length) {res = nums[0] + '圓' + res;}else{//將整數部分按照4個元素分組//確定第一組元素的個數(第一組元素不一定是4個,如1234567分為['123', '4567'])let stLen = integer.length % 4;if(stLen === 0) stLen = 4;//確定有幾組let arrLen = integer.length / 4;//用一個數組保存分組后元素let arrInterger = []//記錄每一組起始值的索引let stattInd = 0;for (let i = 0; i < arrLen; i++) {let endIndex = i * 4 + stLen;arrInterger[i] = integer.substring(stattInd, endIndex);stattInd = endIndex;}//將整數部分轉為中文大寫加單位//記錄實際組數let upLen = arrInterger.length;//記錄0出現的次數let zero = 0;arrInterger.forEach((value, index) => {let temp = ''//記錄每一組內元素的個數let len = value.length;//遍歷每一組中的元素for (let i = 0; i < value.length; i++) {if(value[i] === '0'){zero ++}else{//若前面出現0,則加上‘零’ if (zero > 0) {temp += nums[0]}//數字轉為大寫加上單位temp += nums[value[i]] + baseUnit[i % 4 + 4 - len]//0的個數歸零zero = 0;}}//加上組單位//若連續0的個數大于4,則不加組單位,若小于兩組,則無組單位if (zero < 4 && upLen -2 - index >= 0) {temp += upUnit[upLen -2 - index];}//將轉換后的中文大寫替換原元素arrInterger[index] = temp;})//整數部分分組合并,并加上小數部分res = arrInterger.join('') + '圓' + res;}return res }

    總結

    以上是生活随笔為你收集整理的小写金额转为中文大写的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。