@ohayojp.com/components
Version:
Common business components of ohayojp.
192 lines (184 loc) • 6.75 kB
JavaScript
import { Pipe, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
/**
* @fileoverview added by tsickle
* Generated from: number-to-chinese.interfaces.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* 额外参数选项
* @record
*/
function NumberToChineseOptions() { }
if (false) {
/**
* 指定负数符号,默认:`负`
* @type {?|undefined}
*/
NumberToChineseOptions.prototype.minusSymbol;
/**
* 当传递值无法数值时抛出异常,默认:`false`
* @type {?|undefined}
*/
NumberToChineseOptions.prototype.validThrow;
}
/**
* @fileoverview added by tsickle
* Generated from: number-to-chinese.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @param {?} value
* @param {?=} rmb
* @param {?=} options
* @return {?}
*/
function numberToChinese(value, rmb = true, options) {
options = Object.assign({ minusSymbol: '负', validThrow: false }, options);
if (typeof value === 'number')
value = value.toString();
if (!/^-?\d+(\.\d+)?$/.test(value) && options.validThrow)
throw new Error(`${value} is invalid number type`);
/** @type {?} */
let integer;
/** @type {?} */
let decimal;
[integer, decimal] = value.split('.');
/** @type {?} */
let symbol = '';
if (integer.startsWith('-')) {
symbol = (/** @type {?} */ (options.minusSymbol));
integer = integer.substr(1);
}
if (/^-?\d+$/.test(value))
decimal = null;
integer = (+integer).toString();
/** @type {?} */
const unit = {
num: rmb
? ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '点']
: ['', '一', '二', '三', '四', '五', '六', '七', '八', '九', '点'],
radice: rmb
? ['', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万亿', '拾', '佰', '仟', '兆', '拾', '佰', '仟']
: ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万亿', '十', '百', '千', '兆', '十', '百', '千'],
dec: ['角', '分', '厘', '毫'],
};
if (rmb)
value = (+value).toFixed(5).toString();
/** @type {?} */
let integerRes = '';
/** @type {?} */
const integerCount = integer.length;
if (integer === '0' || integerCount === 0) {
integerRes = '零';
}
else {
/** @type {?} */
let cnDesc = '';
for (let i = 0; i < integerCount; i++) {
/** @type {?} */
const n = +integer[i];
/** @type {?} */
const j = integerCount - i - 1;
/** @type {?} */
const isZero = i > 1 && n !== 0 && integer[i - 1] === '0';
/** @type {?} */
const cnZero = isZero ? '零' : '';
/** @type {?} */
const isEmpptyUnit = (n === 0 && j % 4 !== 0) || integer.substr(i - 3, 4) === '0000';
/** @type {?} */
const descMark = cnDesc;
/** @type {?} */
let cnNum = unit.num[n];
cnDesc = isEmpptyUnit ? '' : unit.radice[j];
// 第一位是一十
if (i === 0 && cnNum === '一' && cnDesc === '十')
cnNum = '';
/** @type {?} */
const isChangeEr = n > 1 &&
cnNum === '二' && // 去除首位
['', '十', '百'].indexOf(cnDesc) === -1 && // 不读两\两十\两百
descMark !== '十';
if (isChangeEr)
cnNum = '两';
integerRes += cnZero + cnNum + cnDesc;
}
}
// 小数部分拼接
/** @type {?} */
let decimalRes = '';
/** @type {?} */
const decimalCount = decimal ? decimal.toString().length : 0;
if (decimal === null) {
decimalRes = rmb ? '整' : '';
}
else if (decimal === '0') {
decimalRes = '零';
}
else {
for (let i = 0; i < decimalCount; i++) {
if (rmb && i > unit.dec.length - 1)
break;
/** @type {?} */
const n = decimal[i];
/** @type {?} */
const cnZero = n === '0' ? '零' : '';
/** @type {?} */
const cnNum = ((/** @type {?} */ (unit.num)))[n];
/** @type {?} */
const cnDesc = rmb ? unit.dec[i] : '';
decimalRes += cnZero + cnNum + cnDesc;
}
}
/** @type {?} */
const ret = symbol +
(rmb ? integerRes + (decimalRes === '零' ? '元整' : `元${decimalRes}`) : integerRes + (decimalRes === '' ? '' : `点${decimalRes}`));
return ret;
}
/**
* @fileoverview added by tsickle
* Generated from: number-to-chinese.pipe.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class NaNumberToChinesePipe {
/**
* @param {?} value
* @param {?=} rmb
* @param {?=} minusSymbol
* @return {?}
*/
transform(value, rmb = true, minusSymbol = '负') {
return numberToChinese(value, rmb, { minusSymbol });
}
}
NaNumberToChinesePipe.decorators = [
{ type: Pipe, args: [{ name: 'n2c' },] }
];
/**
* @fileoverview added by tsickle
* Generated from: number-to-chinese.module.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
const PIPES = [NaNumberToChinesePipe];
class NumberToChineseModule {
}
NumberToChineseModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule],
declarations: PIPES,
exports: PIPES,
},] }
];
/**
* @fileoverview added by tsickle
* Generated from: public_api.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* Generated from: numberToChinese.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { NaNumberToChinesePipe, NumberToChineseModule, numberToChinese };
//# sourceMappingURL=numberToChinese.js.map