npm package to convert between Chinese numbers and Arabic numbers.
npm install chinesenum javascript
//commonjs
var chinesenum = require("chinesenum")
chinesenum.numToChinanumerals(num:number | string | bigint = 0,option:object)
chinesenum.chinanumeralsToNum(num:string = "壹佰叁拾伍元貳角壹分伍厘",option:object)
//ES6 module
import {numToChinanumerals,chinanumeralsToNum} from chinesenum
numToChinanumerals(num:number | string | bigint = 0,option:object)
chinanumeralsToNum(num:string = "壹佰叁拾伍元貳角壹分伍厘",option:object)
`
numToChinanumerals(num:number | string | bigint = 0,option:object)
$3
num
- num:string 可选,默认为0
- num:[number | string | bigint]
option
- option :object 可选,默认为{format:'normal',base:'normal'}
`typescript
interface option{
format:string,
base?:string
}
`
- format = ['normal'|'cn'|'CN'|'army'|'ARMY'|'money'|'MONEY'|'wk'|'WK'|'hs'|'eb']
- base = ['normal'|'gb'|'tw'] 可选,默认为base:normal
测试
正负值输出
eg:
`JavaScript
numToChinanumerals('+123456789')
numToChinanumerals('-123456789')
`
`json
输入 123456789
正负值输出 一亿二千三百四十五万六千七百八十九
输入 +123456789
正负值输出 正一亿二千三百四十五万六千七百八十九
输入 -123456789
正负值输出 负一亿二千三百四十五万六千七百八十九
`
数字转军用数字
eg:
`javascript
numToChinanumerals(123543.123315,{format:'ARMY'})
numToChinanumerals(123543.123315,{format:'army'})
`
`json
输入 202020000
输出 两洞两洞两洞洞洞洞
输出 两洞两洞两洞洞洞洞
输入 102310101010001200000020
输出 幺洞两叁幺洞幺洞幺洞幺洞洞洞幺两洞洞洞洞洞洞两洞
输出 幺洞两三幺洞幺洞幺洞幺洞洞洞幺两洞洞洞洞洞洞两洞
输入 123543.123315
输出 幺两叁伍肆叁点幺两叁叁幺伍
输出 幺两三五四三点幺两三三幺五
输入 12354.123121
输出 幺两叁伍肆点幺两叁幺两幺
输出 幺两三五四点幺两三幺两幺
输入 0.154
输出 洞点幺伍肆
输出 洞点幺五四
输入 -.215
输出 洞点两幺伍
输出 洞点两幺五
输入 -123.
输出 幺两叁
输出 幺两三
输入 135.0000
输出 幺叁伍
输出 幺三五
`
常规测试(满足日常需求)
eg:
`javascript
numToChinanumerals('12345678901234567890')
`
`json
输入 2020020200
输出 二十亿二千零二万零二百
输入 1000200010
输出 十亿零二十万零一十
输入 202020000
输出 二亿零二百零二万
输入 102310101010001200000020
输出 一千零二十三万亿亿一千零一十亿亿一千零一十万亿零十二亿零二十
输入 10100000000000000020
输出 一千零一十亿亿零二十
输入 12345678901234567890
输出 一千二百三十四亿亿五千六百七十八万亿九千零一十二亿三千四百五十六万七千八百九十
输入 705485621320500230020
输出 七万亿亿零五百四十八亿亿五千六百二十一万亿三千二百零五亿零二十三万零二十
输入 10020202000
输出 一百亿二千零二十万二千
输入 10101010
输出 一千零一十万一千零一十
输入 10
输出 十
输入 0
输出 零
`
简繁输入测试(需要指定option的format字段为'cn'或'CN')
eg:
`javascript
numToChinanumerals('705485621320500230020',{format:'cn'})
`
`json
输入 102310101010001200000020
输出 一千〇二十三万亿亿一千〇一十亿亿一千〇一十万亿〇十二亿〇二十
输出 壹仟零貳拾叁萬億億壹仟零壹拾億億壹仟零壹拾萬億零拾貳億零貳拾
输入 10100000000000000020
输出 一千〇一十亿亿〇二十
输出 壹仟零壹拾億億零貳拾
输入 705485621320500230020
输出 七万亿亿〇五百四十八亿亿五千六百二十一万亿三千二百〇五亿〇二十三万〇二十
输出 柒萬億億零伍佰肆拾捌億億伍仟陆佰貳拾壹萬億叁仟貳佰零伍億零貳拾叁萬零貳拾
输入 10
输出 十
输出 拾
输入 0
输出 〇
输出 零
`
口语化输入测试(需要指定option的format字段为'spoken')
eg:
`javascript
numToChinanumerals('2000202020',{format:'cn spoken'})
`
`json
输入 2020020200
标准输出 二十亿二千〇二万〇二百
口语化输出 二十亿两千〇二万〇两百
输入 2000202020
标准输出 二十亿〇二十万二千〇二十
口语化输出 二十亿〇二十万两千〇二十
输入 202022222
标准输出 二亿〇二百〇二万二千二百二十二
口语化输出 两亿〇两百〇二万两千两百二十二
输入 202022202
标准输出 二亿〇二百〇二万二千二百〇二
口语化输出 两亿〇两百〇二万两千两百〇二
输入 102210202020010200000020
标准输出 一千〇二十二万亿亿一千〇二十亿亿二千〇二十万亿〇一百〇二亿〇二十
口语化输出 一千〇二十二万亿亿一千〇二十亿亿两千〇二十万亿〇一百〇二亿〇二十
输入 10100000000000000020
标准输出 一千〇一十亿亿〇二十
口语化输出 一千〇一十亿亿〇二十
输入 10020202000
标准输出 一百亿二千〇二十万二千
口语化输出 一百亿两千〇二十万两千
输入 20
标准输出 二十
口语化输出 二十
输入 2
标准输出 二
口语化输出 二
`
金额输入测试(需要指定option的format字段为'money'或'MONEY')
eg:
`javascript
numToChinanumerals('12354.123121', { format: 'money' })
numToChinanumerals('12354.123121', { format: 'MONEY' })
`
`json
输入 202020000
标准输出 二亿〇二百〇二万
金额输出 貳億零貳佰零貳萬元整
输入 102310101010001200000020
标准输出 一千〇二十三万亿亿一千〇一十亿亿一千〇一十万亿〇十二亿〇二十
金额输出 壹仟零貳拾叁萬億億壹仟零壹拾億億壹仟零壹拾萬億零壹拾貳億零貳拾元整
输入 123543.123315
标准输出 十二万三千五百四十三点一二三三一五
金额输出 壹拾貳萬叁仟伍佰肆拾叁元壹角貳分叁厘
输入 12354.123121
标准输出 一万二千三百五十四点一二三一二一
金额输出 壹萬貳仟叁佰伍拾肆元壹角貳分叁厘
输入 0.154
标准输出 〇点一五四
金额输出 零元壹角伍分肆厘
输入 .215
标准输出 〇点二一五
金额输出 零元貳角壹分伍厘
输入 -123.
标准输出 负一百二十三
金额输出 負壹佰貳拾叁元整
输入 135.0000
标准输出 一百三十五
金额输出 壹佰叁拾伍元整
`
数量单位及大数(超过16位)输入测试(需要指定option的base字段为'normal'或'gb'或'tw')
eg:
`javascript
numToChinanumerals('102310101010001200000020', { format: 'cn' })
numToChinanumerals('102310101010001200000020', { format: 'cn', base:'normal' })
numToChinanumerals('102310101010001200000020', { format: 'cn', base:'gb' })
numToChinanumerals('102310101010001200000020', { format: 'cn', base:'tw' })
`
`json
输入 102310101010001200000020
标准输出 一千〇二十三万亿亿一千〇一十亿亿一千〇一十万亿〇十二亿〇二十
国标输出 一千〇二十三垓一千〇一十京一千〇一十太〇十二亿〇二十
台标输出 一千〇二十三垓一千〇一十京一千〇一十兆〇十二亿〇二十
输入 10100000000000000020
标准输出 一千〇一十亿亿〇二十
国标输出 一千〇一十京〇二十
台标输出 一千〇一十京〇二十
输入 705485621320500230020
标准输出 七万亿亿〇五百四十八亿亿五千六百二十一万亿三千二百〇五亿〇二十三万〇二十
国标输出 七垓〇五百四十八京五千六百二十一太三千二百〇五亿〇二十三万〇二十
台标输出 七垓〇五百四十八京五千六百二十一兆三千二百〇五亿〇二十三万〇二十
`
小数输入测试(需要输入数为小数)
eg:
`javascript
numToChinanumerals('123543.123315',{format:'MONEY'})
numToChinanumerals('123543.123315',{format:'cn'})
`
`json
输入 123543.123315
输出 十二万三千五百四十三点一二三三一五
输出 拾貳萬叁仟伍佰肆拾叁點壹貳叁叁壹伍
输出 幺两叁伍肆叁点幺两叁叁幺伍
输出 壹拾貳萬叁仟伍佰肆拾叁元壹角貳分叁厘
输入 12354.123121
输出 一万二千三百五十四点一二三一二一
输出 壹萬貳仟叁佰伍拾肆點壹貳叁壹貳壹
输出 幺两叁伍肆点幺两叁幺两幺
输出 壹萬貳仟叁佰伍拾肆元壹角貳分叁厘
输入 0.154
输出 〇点一五四
输出 零點壹伍肆
输出 洞点幺伍肆
输出 零元壹角伍分肆厘
输入 -154.25
输出 负一百五十四点二五
输出 負壹佰伍拾肆點貳伍
输出 幺伍肆点两伍
输出 負壹佰伍拾肆元貳角伍分
输入 -.215
输出 负〇点二一五
输出 零點貳壹伍
输出 洞点两幺伍
输出 零元貳角壹分伍厘
输入 -123.
输出 负一百二十三
输出 負壹佰貳拾叁
输出 幺两叁
输出 負壹佰貳拾叁元整
输入 456554
输出 四十五万六千五百五十四
输出 肆拾伍萬陆仟伍佰伍拾肆
输出 肆伍陆伍伍肆
输出 肆拾伍萬陆仟伍佰伍拾肆元整
输入 135.0000
输出 一百三十五
输出 壹佰叁拾伍
输出 幺叁伍
输出 壹佰叁拾伍元整
`
中文星期天干地支输出
eg:
`javascript
numToChinanumerals(5,{format:'WK'})
numToChinanumerals(5,{format:'wk'})
numToChinanumerals(7,{format:'hs'}) //天干(Heavenly Stems)
numToChinanumerals(11,{format:'eb'}) //地支(Earthly Branches)
`
`json
输入 2
周输出 周二
星期输出 二
天干输出 乙
地支输出 丑
输入 10
周输出 周三
星期输出 三
天干输出 癸
地支输出 酉
输入 12
周输出 周五
星期输出 五
天干输出 乙
地支输出 亥
输入 26
周输出 周五
星期输出 五
天干输出 己
地支输出 丑
输入 -12.2
周输出 周五
星期输出 五
天干输出 乙
地支输出 亥
输入 0
周输出 周日
星期输出 日
天干输出 癸
地支输出 亥
输入 -.23
周输出 周日
星期输出 日
天干输出 癸
地支输出 亥
输入
周输出 周日
星期输出 日
天干输出 癸
地支输出 亥
`
中文农历日期输出
eg:
`javascript
numToChinanumerals(5,{format:'day'})
numToChinanumerals(15,{format:'day'})
numToChinanumerals(20,{format:'day'})
numToChinanumerals(21,{format:'day'})
numToChinanumerals(30,{format:'day'})
`
`json
输入 8
农历日期输出 初八
输入 10
农历日期输出 初十
输入 11
农历日期输出 十一
输入 19
农历日期输出 十九
输入 20
农历日期输出 廿十
输入 26
农历日期输出 廿六
输入 30
农历日期输出 三十
输入 31
农历日期输出 三十一
输入 32
农历日期输出 初一
输入 33
`
鲁棒性测试
eg:
`JavaScript
let arr = ['/0-.123','0s000-1s--32w1','2 a3.2.3-5646','00a.-456ds54 1564','a00-.123']
arr.forEach((v)=>{console.log(numToChinanumerals(v))})
`
`json
输入: /0-.123
输出: 负零点一二三
输入: 0s000-1s--32w1
输出: 负一千三百二十一
输入: 2 a3.2.3-5646
输出: 二十三点二三五六四六
输入: 00a.-456ds54 1564
输出: 零点四五六五四一五六四
输入: a00-.123
输出: 负零点一二三
`
同类型对比测试
eg:
`JavaScript
numToChinese(10101010001200000000)
numToChinanumerals(10101010001200000000)
`
`json
输入: 00a.-456ds54 1564
某功能类似的库输出: 抛出异常程序崩溃
我重新编写的库输出: 零点四五六五四一五六四
输入: 1000200010
某功能类似的库输出: 一十亿零二十万零一十
我重新编写的库输出: 十亿零二十万零一十
输入: 1000200010
某功能类似的库输出: 一十亿零二十万零一十
我重新编写的库输出: 十亿零二十万零一十
输入: 202020000
某功能类似的库输出: 二亿零二百零二万零
我重新编写的库输出: 二亿零二百零二万
输入: 10101010001200000000
某功能类似的库输出: 一千零一十亿亿一千零一十万亿零一十二亿零零
我重新编写的库输出: 一千零一十亿亿一千零一十万亿零十二亿
输入: 0000
某功能类似的库输出: 零
我重新编写的库输出: 零
输入: 10
某功能类似的库输出: 一十
我重新编写的库输出: 十
输入: 0
某功能类似的库输出: \\没错这里什么输出都没有
我重新编写的库输出: 零
输入: 10101010000000000000
某功能类似的库输出: 一千零一十亿亿一千零一十万亿零零零
我重新编写的库输出: 一千零一十亿亿一千零一十万亿
输入: 200200000
某功能类似的库输出: 二亿零二十万零
我重新编写的库输出: 二亿零二十万
输入: 10101010001200000020
某功能类似的库输出: 一千零一十亿亿一千零一十万亿零一十二亿零二十
我重新编写的库输出: 一千零一十亿亿一千零一十万亿零十二亿零二十
`
chinanumeralsToNum(str:string = '', option:object = {format:'cn'})
$3
str
- str:string 可选,默认为0
option
- option :object 必选,默认为{format:'cn'}
`typescript
interface option{
format:string,
}
`
- format = [''cn'|'CN'|'army'|'ARMY']
测试
军用数字输出
eg:
`JavaScript
chinanumeralsToNum('幺两叁伍肆叁点幺两叁叁幺伍', { format: 'army' })
`
`json
输入 幺洞两三幺洞幺洞幺洞幺洞洞洞幺两洞洞洞洞洞洞两洞
输出 102310101010001200000020
输入 幺两叁伍肆叁点幺两叁叁幺伍
输出 123543.123315
`
一般中文数字输出
eg:
`JavaScript
chinanumeralsToNum('二千六百五十垓〇一百六十五京四千一百兆〇二百二十五亿四千五百二十万〇一百五十二', { format: 'cn' })
`
`json
输入 二千六百五十垓〇一百六十五京四千一百兆〇二百二十五亿四千五百二十万〇一百五十二
输出 265001654100022545200152
输入 一百〇四万亿亿五千亿亿一千八百三十三万亿〇一百三十五亿四千六百〇四万八千五百
输出 10450001833013546048500
输入 七垓〇五百四十八京五千六百二十一太三千二百〇五亿〇二十三万〇二十
输出 705485621320500230020
`
含有小数位的数字输出
eg:
`JavaScript
chinanumeralsToNum('十二万三千五百四十三点一二三三一五', { format: 'cn' })
`
`json
输入 十二万三千五百四十三点一二三三一五
输出 123543.123315
输入 拾貳萬叁仟伍佰肆拾叁點壹貳叁叁壹伍
输出 123543.123315
输入 零元貳角壹分伍厘
输出 0.215
输入 壹佰叁拾伍元整
输出 135
输入 零元零角零分零厘
输出 0
输入 零元零角壹分零厘
输出 0.01
``