小写金额转为中文大写
生活随笔
收集整理的這篇文章主要介紹了
小写金额转为中文大写
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目標
將小寫的金額轉化為中文大寫,如99.99轉為“玖拾玖圓玖角玖分”
思路
當有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 }總結
以上是生活随笔為你收集整理的小写金额转为中文大写的全部內容,希望文章能夠幫你解決所遇到的問題。