Source: number.js

  1. /*
  2. 数字相关
  3. Thanks:Coco
  4. */
  5. /**
  6. * [getRoundNum description] 生成范围随机数
  7. * @param min {Number} 最小值
  8. * @param max {Number} 最大值
  9. * @return {Number} 生成的随机数字
  10. */
  11. function genRandomNum(min, max) {
  12. return Math.floor(Math.random() * (max - min + 1)) + min;;
  13. }
  14. /**
  15. * [getRoundNum description] 精确到小数点后几位
  16. * @param num {Number} 原数值
  17. * @param decimal {Number} 精确到小数点后的位数
  18. * @return {Number} 精确后的数字
  19. */
  20. function getRoundNum(num, decimal) {
  21. return Math.round(num * 10 ** decimal) / 10 ** decimal;
  22. }
  23. /**
  24. * [isDigit description] 判断是否为数字类型
  25. * @param value {String/Number} 需要判断的值
  26. * @return {String} 判断
  27. */
  28. function isDigit(value) {
  29. var patrn = /^[0-9]*$/;
  30. if (patrn.exec(value) === null || value === "") {
  31. return false
  32. } else {
  33. return true
  34. }
  35. }
  36. /**
  37. * [numOfComma description] 将数字转换为每3位添加一个逗号的格式,123456->123,456
  38. * @param num {Number} 原数字
  39. * @return {String} 转换后的"数字"
  40. */
  41. function numOfComma(num) {
  42. num = "" + num; //数字转换为字符串
  43. var len = num.length,
  44. commaNum = parseInt((len - 1) / 3),
  45. leftNum = len % 3 === 0 ? 3 : len % 3,
  46. result = "";
  47. if (len <= 3) { //长度小于3
  48. result = num;
  49. } else {
  50. result = num.slice(0, leftNum);
  51. for (var i = commaNum; i >= 1; i--) {
  52. result += "," + num.slice(len - i * 3, len - (i - 1) * 3);
  53. }
  54. }
  55. return result;
  56. }
  57. /**
  58. * [numOfComma2 description] 利用正则将数字转换为每3位添加一个逗号的格式(第2种实现方式)
  59. * @param num {Number} 原数字
  60. * @return {String} 转换后的"数字"
  61. */
  62. function numOfComma2(num) {
  63. return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  64. }
  65. /**
  66. * [numberUpperFormat description] 数字转换,简单理解后面要有三个0,则是千,4个零,则是万。当然不一定是零,位数到了就行,反正都会省略掉(未做四舍五入),来自:http://xjinjin.net/2016/08/12/unit-conversion/
  67. * @param input {Number} 原数字
  68. * @return {String} 转换后的"数字"
  69. */
  70. function numberUpperFormat(input) {
  71. // 可以随意的增删改units内容实现单位的配置
  72. var units = [
  73. { num: 3, unit: '千' },
  74. { num: 4, unit: '万' },
  75. { num: 6, unit: '百万' },
  76. { num: 7, unit: '千万' },
  77. { num: 8, unit: '亿' }];
  78. // 精确到整数
  79. var num = input.toFixed('0');
  80. if (num.length <= 3) {
  81. // 千以下不加单位
  82. return num;
  83. }
  84. // 保证前面至少留一位
  85. var len = num.length - 1;
  86. var isFind = false;
  87. for (var i = 0, length = units.length; i < length; i++) {
  88. var item = units[i];
  89. if (len >= item.num && len < units[i + 1].num) {
  90. isFind = true;
  91. } else if (i === length - 2) {
  92. isFind = true;
  93. item = units[++i];
  94. }
  95. if (isFind) {
  96. // 确认区间后,返回前几位加上单位
  97. return '' + num.slice(0, num.length - item.num) + item.unit;
  98. }
  99. }
  100. }
  101. /**
  102. * [digitUppercase description] 金额的大写转换,来自:https://segmentfault.com/g/1570000011077131/d/1560000011078444
  103. * @param n {Number} 原金额数字
  104. * @return {String} 大写的金额
  105. */
  106. function digitUppercase(n) {
  107. var fraction = ['角', '分'];
  108. var digit = [
  109. '零', '壹', '贰', '叁', '肆',
  110. '伍', '陆', '柒', '捌', '玖'
  111. ];
  112. var unit = [
  113. ['元', '万', '亿'],
  114. ['', '拾', '佰', '仟']
  115. ];
  116. var head = n < 0 ? '欠' : '';
  117. n = Math.abs(n);
  118. var s = '';
  119. for (var i = 0; i < fraction.length; i++) {
  120. s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
  121. }
  122. s = s || '整';
  123. n = Math.floor(n);
  124. for (var j = 0; j < unit[0].length && n > 0; j++) {
  125. var p = '';
  126. for (var k = 0; k < unit[1].length && n > 0; k++) {
  127. p = digit[n % 10] + unit[1][k] + p;
  128. n = Math.floor(n / 10);
  129. }
  130. s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][j] + s;
  131. }
  132. return head + s.replace(/(零.)*零元/, '元')
  133. .replace(/(零.)+/g, '零')
  134. .replace(/^整$/, '零元整');
  135. }
  136. /**
  137. * [formatDuration description] 时间转换,多用于视频播放时的剩余时间显示
  138. * @param t {Number/String} 视频的秒数
  139. * @return {String} 转换后的时间,例如:'389:03','00:05'
  140. */
  141. function formatDuration (t) {
  142. if (!t) { return ''; }
  143. var m = Math.floor(t / 60);
  144. var s = t % 60;
  145. if (m < 10) { m = '0' + m; }
  146. if (s < 10) { s = '0' + s; }
  147. return m + ':' + s;
  148. }