@aliretail/react-materials-components
Version:
151 lines (143 loc) • 2.55 kB
JavaScript
// 除下列特殊币种外,小数点后面一致保留两位,小数点前用,进行千分位。当前特殊货币规范取自ISO 4217 1 January 2019版本
import numeral from 'numeral';
var currencyMap = {
BHD: {
e: 3
},
BIF: {
e: 0
},
CLF: {
e: 4
},
CLP: {
e: 0
},
DJF: {
e: 0
},
GNF: {
e: 0
},
IQD: {
e: 3
},
ISK: {
e: 0
},
JOD: {
e: 3
},
JPY: {
e: 0
},
KMF: {
e: 0
},
KRW: {
e: 0
},
KWD: {
e: 3
},
LYD: {
e: 3
},
OMR: {
e: 3
},
PYG: {
e: 0
},
RWF: {
e: 0
},
TND: {
e: 3
},
UGX: {
e: 0
},
UYI: {
e: 0
},
UYW: {
e: 4
},
VUV: {
e: 0
},
XAF: {
e: 0
},
XOF: {
e: 0
},
XPF: {
e: 0
},
// 财务特殊处理
IDR: {
e: 0
},
TWD: {
e: 0
},
VND: {
e: 0
}
};
var CurrencyFormat = {
getFormatDetails: function getFormatDetails(p) {
var _p$currency = p.currency,
currency = _p$currency === void 0 ? 'CNY' : _p$currency,
_p$precision = p.precision,
precision = _p$precision === void 0 ? '' : _p$precision;
if (!("" + precision)) {
// 不存在 precision 的情况下使用 currency
if (currencyMap[currency]) {
p.precision = currencyMap[currency].e;
} else {
p.precision = 2;
}
}
p.currency = currency;
return p;
},
getFormatter: function getFormatter(n, fd) {
if (isNaN(n) || !("" + n)) {
return '';
}
var precision = fd.precision;
var baseRule = '0,0';
var precisionRule = '';
if (precision > 0) {
for (var i = 0; i < precision; i++) {
precisionRule += '0';
}
}
var finalRule = precisionRule ? baseRule + "." + precisionRule : baseRule;
var formatedData = numeral(n).format(finalRule);
return formatedData;
},
/**
*
* @param {*} value
* @param {*} currency [currency = CNY]货币种类,支持ISO_4217的code规范
* @param {*} config [precision='']保留小数位数
*/
formatAmount: function formatAmount(value, currency, config) {
if (currency === void 0) {
currency = 'CNY';
}
if (config === void 0) {
config = {};
}
config.currency = currency;
var formatDetail = this.getFormatDetails(config);
return this.getFormatter(value, formatDetail);
}
};
export var formatAmount = CurrencyFormat.formatAmount.bind(CurrencyFormat);
export var currencyMapData = currencyMap;
export default CurrencyFormat;