chinese-numbering
Version:
format numbers as chinese words
3 lines (2 loc) • 2.47 kB
JavaScript
const e=Object.freeze({chineseType:"simplified",keepOne:!1});function n(e){switch(e){case"s":return"simplified";case"t":return"traditional";default:return e}}function t(t){return"boolean"==typeof t?{chineseType:t?"traditional":"simplified",keepOne:e.keepOne}:"string"==typeof t?{chineseType:n(t),keepOne:e.keepOne}:"object"==typeof t&&null!==t?{chineseType:"string"==typeof t.chineseType?n(t.chineseType):e.chineseType,keepOne:void 0===t.keepOne?e.keepOne:!!t.keepOne}:e}var i=Object.freeze({__proto__:null,simplified:{digits:["零","一","二","三","四","五","六","七","八","九"],units:["","十","百","千","万","十","百","千","亿","十","百","千","兆","十","百","千","京","十","百","千","垓"],ordinal:"第",point:"点",minus:"负"},traditional:{digits:["零","一","二","三","四","五","六","七","八","九"],units:["","十","百","千","萬","十","百","千","億","十","百","千","兆","十","百","千","京","十","百","千","垓"],ordinal:"第",point:"點",minus:"負"}});function r(e){return i[e.chineseType]}const o=new WeakMap;function s(e){const n=o.get(e);if(n)return n;const{digits:t,units:i}=e,r=i[1]+i[2]+i[3],s=i[4]+i[8]+i[12]+i[16]+i[20],p=t[0],c={onlyZero:[new RegExp(`(${p})[${r}]`,"g"),"$1"],zeroBetweenBigUnits:[new RegExp(`([${s}])[^${r}]+([${s}])`,"g"),"$1"+p],zeroBetweenSmallAndBigUnits:[new RegExp(`([${r}])${p}+([${s}])`,"g"),"$1$2"+p],groupZero:[new RegExp(`(${t[0]})+`,"g"),"$1"],removeTailZero:[new RegExp(p+"+$"),""],removeOne:[new RegExp(`^${t[1]}${i[1]}`),i[1]]};return o.set(e,c),c}function p(e,n){const i=t(n),o=r(i);return function(e,n,t){const{digits:i,units:r,minus:o}=n,p=s(n);let c=Math.floor(Math.abs(e));if(c<1)return(e<0?o:"")+i[0];let l="",u=0;for(;c>0;)l=i[c%10]+r[u]+l,c=Math.floor(c/10),u++;return l=l.replace(...p.onlyZero).replace(...p.zeroBetweenBigUnits).replace(...p.zeroBetweenSmallAndBigUnits).replace(...p.groupZero).replace(...p.removeTailZero),1!=t&&(l=l.replace(...p.removeOne)),(e<0?o:"")+l}(e,o,i.keepOne)+function(e,n){if(e%1==0)return"";e=Math.abs(e);const{digits:t,point:i}=n;let r=e.toString();r=r.slice(r.indexOf(".")+1);let o="";for(const e of r)o+=t[parseInt(e)];return i+o}(e,o)}function c(e,n){return r(t(n)).ordinal+e.toString(10)}function l(e,n){const i=t(n);return r(i).ordinal+p(e,i)}export{n as normalizeChineseType,t as normalizeOptions,p as numberToChinese,l as numberToChineseOrdinal,c as numberToChineseOrdinalWithArabic};
//# sourceMappingURL=es.min.js.map