/*
数字相关
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;
}