/* 数字相关 Thanks:Coco */ /** * [getRoundNum description] 生成范围随机数 * @param min {Number} 最小值 * @param max {Number} 最大值 * @return {Number} 生成的随机数字 */ function genRandomNum(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min;; } /** * [getRoundNum description] 精确到小数点后几位 * @param num {Number} 原数值 * @param decimal {Number} 精确到小数点后的位数 * @return {Number} 精确后的数字 */ function getRoundNum(num, decimal) { return Math.round(num * 10 ** decimal) / 10 ** decimal; } /** * [isDigit description] 判断是否为数字类型 * @param value {String/Number} 需要判断的值 * @return {String} 判断 */ function isDigit(value) { var patrn = /^[0-9]*$/; if (patrn.exec(value) === null || value === "") { return false } else { return true } } /** * [numOfComma description] 将数字转换为每3位添加一个逗号的格式,123456->123,456 * @param num {Number} 原数字 * @return {String} 转换后的"数字" */ function numOfComma(num) { num = "" + num; //数字转换为字符串 var len = num.length, commaNum = parseInt((len - 1) / 3), leftNum = len % 3 === 0 ? 3 : len % 3, result = ""; if (len <= 3) { //长度小于3 result = num; } else { result = num.slice(0, leftNum); for (var i = commaNum; i >= 1; i--) { result += "," + num.slice(len - i * 3, len - (i - 1) * 3); } } return result; } /** * [numOfComma2 description] 利用正则将数字转换为每3位添加一个逗号的格式(第2种实现方式) * @param num {Number} 原数字 * @return {String} 转换后的"数字" */ function numOfComma2(num) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } /** * [numberUpperFormat description] 数字转换,简单理解后面要有三个0,则是千,4个零,则是万。当然不一定是零,位数到了就行,反正都会省略掉(未做四舍五入),来自:http://xjinjin.net/2016/08/12/unit-conversion/ * @param input {Number} 原数字 * @return {String} 转换后的"数字" */ function numberUpperFormat(input) { // 可以随意的增删改units内容实现单位的配置 var units = [ { num: 3, unit: '千' }, { num: 4, unit: '万' }, { num: 6, unit: '百万' }, { num: 7, unit: '千万' }, { num: 8, unit: '亿' }]; // 精确到整数 var num = input.toFixed('0'); if (num.length <= 3) { // 千以下不加单位 return num; } // 保证前面至少留一位 var len = num.length - 1; var isFind = false; for (var i = 0, length = units.length; i < length; i++) { var item = units[i]; if (len >= item.num && len < units[i + 1].num) { isFind = true; } else if (i === length - 2) { isFind = true; item = units[++i]; } if (isFind) { // 确认区间后,返回前几位加上单位 return '' + num.slice(0, num.length - item.num) + item.unit; } } } /** * [digitUppercase description] 金额的大写转换,来自:https://segmentfault.com/g/1570000011077131/d/1560000011078444 * @param n {Number} 原金额数字 * @return {String} 大写的金额 */ function digitUppercase(n) { var fraction = ['角', '分']; var digit = [ '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' ]; var unit = [ ['元', '万', '亿'], ['', '拾', '佰', '仟'] ]; var head = n < 0 ? '欠' : ''; n = Math.abs(n); var s = ''; for (var i = 0; i < fraction.length; i++) { s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, ''); } s = s || '整'; n = Math.floor(n); for (var j = 0; j < unit[0].length && n > 0; j++) { var p = ''; for (var k = 0; k < unit[1].length && n > 0; k++) { p = digit[n % 10] + unit[1][k] + p; n = Math.floor(n / 10); } s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][j] + s; } return head + s.replace(/(零.)*零元/, '元') .replace(/(零.)+/g, '零') .replace(/^整$/, '零元整'); } /** * [formatDuration description] 时间转换,多用于视频播放时的剩余时间显示 * @param t {Number/String} 视频的秒数 * @return {String} 转换后的时间,例如:'389:03','00:05' */ function formatDuration (t) { if (!t) { return ''; } var m = Math.floor(t / 60); var s = t % 60; if (m < 10) { m = '0' + m; } if (s < 10) { s = '0' + s; } return m + ':' + s; }