目标
将小写的金额转化为中文大写,如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 = ["零", "壹", "贰", "叁",</