为什么80%的码农都做不了架构师?>>>
此方法的参考位置记不清了,只做了一点儿修改
封装进个人工具库中,支持小数点后 3 位,使用方法参考 @uses
;(function(win) {'use strict';// 构造var Util = function() {this.version = '1.0';this.author = 'whoru.S.Q <whoru.sun@gmail.com>';this.link = '';};Util.fn = Util.prototype;// 公用辅助var doc = document;// ...../*** xx转大写金额(会计),精确到小数点后 3 位* @uses** util.amountInWords(1235.123); => 壹仟贰佰叁拾伍元壹角贰分叁** @param {integer|float} n* @return {}*/Util.fn.amountInWords = function(n) {var fraction = ['角', '分', ' '],digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'],unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']];// 记录正负号var head = n < 0? '欠': '';n = Math.abs(n);// 角分x处理var s = '';for (var i = 0; i < fraction.length; i++) {var tmp = parseFloat(n * 10 * Math.pow(10, i)).toFixed(3).replace(/0+$/, '');s += (digit[Math.floor(tmp) % 10] + fraction[i]).replace(/零./, '');}s = s || '整';//n = Math.floor(n);for (var i = 0; i < unit[0].length && n > 0; i++) {var p = '';for (var j = 0; j < unit[1].length && n > 0; j++) {p = digit[n % 10] + unit[1][j] + p;n = Math.floor(n / 10);}s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;}return head +s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');};//if (!(typeof util === 'undefined' && (win.util = new Util))) {win.utools = new Util();log.warn('`util` had used, please use `utools` instead.');}}(window));
其中
var tmp = parseFloat(n * 10 * Math.pow(10, i)).toFixed(3).replace(/0+$/, '');
涉及 JavaScript 浮点数计算的精度处理
如:
> 1.0 - 0.7
0.30000000000000004
> (1.0 - 0.7).toFixed(3).replace(/0+$/, '');
"0.3"