oaNumber.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. layui.define([], function (exports) {
  2. let oaNumber = {
  3. // 加法函数
  4. accAdd:function(arg1, arg2) {
  5. var r1, r2, m;
  6. try {
  7. // 获取到小数点的位数
  8. r1 = arg1.toString().split(".")[1].length;
  9. } catch (e) {
  10. r1 = 0;
  11. }
  12. try {
  13. r2 = arg2.toString().split(".")[1].length;
  14. } catch (e) {
  15. r2 = 0;
  16. }
  17. // 取位数最大的 10^ n次方
  18. m = Math.pow(10, Math.max(r1, r2));
  19. return (arg1 * m + arg2 * m) / m;
  20. },
  21. //减法函数
  22. accSub:function(arg1, arg2) {
  23. var r1, r2, m, n;
  24. try {
  25. r1 = arg1.toString().split(".")[1].length;
  26. } catch (e) {
  27. r1 = 0;
  28. }
  29. try {
  30. r2 = arg2.toString().split(".")[1].length;
  31. } catch (e) {
  32. r2 = 0;
  33. }
  34. m = Math.pow(10, Math.max(r1, r2)); // 动态控制精度长度
  35. // 计算结果保留的位数
  36. n = (r1 >= r2) ? r1 : r2;
  37. return parseFloat(((arg1 * m - arg2 * m) / m).toFixed(n));
  38. },
  39. //乘法函数
  40. accMul:function(arg1, arg2) {
  41. var m = 0,
  42. s1 = arg1.toString(),
  43. s2 = arg2.toString();
  44. try {
  45. m += s1.split(".")[1].length;
  46. } catch (e) {
  47. }
  48. try {
  49. m += s2.split(".")[1].length;
  50. } catch (e) {
  51. }
  52. return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
  53. },
  54. //除法函数
  55. accDiv(arg1, arg2) {
  56. var t1 = 0,
  57. t2 = 0,
  58. r1, r2;
  59. try {
  60. t1 = arg1.toString().split(".")[1].length;
  61. } catch (e) {
  62. }
  63. try {
  64. t2 = arg2.toString().split(".")[1].length;
  65. } catch (e) {
  66. }
  67. with (Math) {
  68. r1 = Number(arg1.toString().replace(".", ""));
  69. r2 = Number(arg2.toString().replace(".", ""));
  70. return (r1 / r2) * pow(10, t2 - t1);
  71. }
  72. },
  73. //千分号格式化金额
  74. accFormat:function (num) {
  75. if (typeof num !== 'number') {
  76. return '-';
  77. }
  78. if(num=='-'||num==''){
  79. return '-';
  80. }
  81. var res=num.toString().replace(/\d+/, function(n){ // 先提取整数部分
  82. return n.replace(/(\d)(?=(\d{3})+$)/g,function($1){
  83. return $1+",";
  84. });
  85. })
  86. return res;
  87. },
  88. //金额转人民币大写
  89. accCny:function(num){
  90. if (typeof num !== 'number') {
  91. return '-';
  92. }
  93. if (num === 0) {
  94. return '零元整';
  95. }
  96. const fraction = ['角', '分'];
  97. const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
  98. const unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']];
  99. let head = num < 0 ? '欠' : '';
  100. num = Math.abs(num);
  101. let s = '';
  102. for (let i = 0; i < fraction.length; i++) {
  103. s += (digit[Math.floor(num * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
  104. }
  105. s = s || '整';
  106. num = Math.floor(num);
  107. for (let i = 0; i < unit[0].length && num > 0; i++) {
  108. let p = '';
  109. for (let j = 0; j < unit[1].length && num > 0; j++) {
  110. p = digit[num % 10] + unit[1][j] + p;
  111. num = Math.floor(num / 10);
  112. }
  113. s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
  114. }
  115. return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
  116. }
  117. };
  118. exports('oaNumber', oaNumber);
  119. });