calculation.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. // 加法
  2. export function accAdd(arg1, arg2,pointWs) {
  3. if (isEmpty(arg1)) {
  4. arg1 = "0";
  5. }
  6. if (isEmpty(arg2)) {
  7. arg2 = "0";
  8. }
  9. var r1, r2, max;
  10. try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
  11. try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
  12. max = Math.pow(10, Math.max(r1, r2));
  13. if (isEmpty(pointWs)) {
  14. return ((arg1 * max + arg2 * max) / max) + "";
  15. } else {
  16. if (isEmpty(arg1)) {
  17. arg1 = 0;
  18. }
  19. if (isEmpty(arg2)) {
  20. arg2 = 0;
  21. }
  22. arg1 = parseFloat(arg1);
  23. arg2 = parseFloat(arg2);
  24. return fomatFloat((arg1 + arg2), pointWs);
  25. }
  26. }
  27. // 减法
  28. export function accSub(arg1, arg2,pointWs) {
  29. if (isEmpty(arg1)) {
  30. arg1 = "0";
  31. }
  32. if (isEmpty(arg2)) {
  33. arg2 = "0";
  34. }
  35. var r1, r2, max, min;
  36. try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
  37. try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
  38. max = Math.pow(10, Math.max(r1, r2));
  39. //动态控制精度长度
  40. min = (r1 >= r2) ? r1 : r2;
  41. if (isEmpty(pointWs)) {
  42. return ((arg1 * max - arg2 * max) / max);
  43. } else {
  44. if (isEmpty(arg1)) {
  45. arg1 = 0;
  46. }
  47. if (isEmpty(arg2)) {
  48. arg2 = 0;
  49. }
  50. arg1 = parseFloat(arg1);
  51. arg2 = parseFloat(arg2);
  52. return fomatFloat((arg1 - arg2), pointWs);
  53. }
  54. }
  55. // 乘法
  56. // pointWs:小数点位数
  57. export function accMul(arg1, arg2, pointWs) {
  58. if (isEmpty(arg1)) {
  59. arg1 = "0";
  60. }
  61. if (isEmpty(arg2)) {
  62. arg2 = "0";
  63. }
  64. var max = 0, s1 = arg1.toString(), s2 = arg2.toString();
  65. try { max += s1.split(".")[1].length } catch (e) { }
  66. try { max += s2.split(".")[1].length } catch (e) { }
  67. var resData = Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, max);
  68. if(!isEmpty(pointWs)) {
  69. if (isEmpty(arg1)) {
  70. arg1 = 0;
  71. }
  72. if (isEmpty(arg2)) {
  73. arg2 = 0;
  74. }
  75. arg1 = parseFloat(arg1);
  76. arg2 = parseFloat(arg2);
  77. // 四舍五入
  78. return fomatFloat(arg1 * arg2, pointWs);
  79. }
  80. return resData + "";
  81. }
  82. // 除法
  83. //pointWs:小数点位数
  84. export function accDivFun(arg1, arg2, pointWs) {
  85. if (isEmpty(arg1)) {
  86. arg1 = "0";
  87. }
  88. if (isEmpty(arg2)) {
  89. arg2 = "0";
  90. }
  91. var t1 = 0, t2 = 0, r1, r2;
  92. try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
  93. try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
  94. r1 = Number(arg1.toString().replace(".", ""))
  95. r2 = Number(arg2.toString().replace(".", ""))
  96. var resData = (r1 / r2) * Math.pow(10, t2 - t1);
  97. if(!isEmpty(pointWs)) {
  98. if (isEmpty(arg1)) {
  99. arg1 = 0;
  100. }
  101. if (isEmpty(arg2)) {
  102. arg2 = 0;
  103. }
  104. arg1 = parseFloat(arg1);
  105. arg2 = parseFloat(arg2);
  106. // 四舍五入
  107. return fomatFloat(arg1/arg2, pointWs);
  108. }
  109. return resData + "";
  110. }
  111. //判断是否为空
  112. export function isEmpty(str) {
  113. if(str == 'undefined' || str == "" || str == null || str == "null") {
  114. return true;
  115. }
  116. return false;
  117. }
  118. export function fomatFloat(num,n){
  119. if (isEmpty(n)) {
  120. n = 2;
  121. }
  122. var f = parseFloat(num);
  123. if(isNaN(f)){
  124. return num;
  125. }
  126. var start = "";
  127. if (f < 0) {
  128. start = "-";
  129. }
  130. f = Math.abs(f);
  131. f = Math.round(f*Math.pow(10, n))/Math.pow(10, n); // n 幂
  132. var s = f.toString();
  133. var rs = s.indexOf('.');
  134. //判定如果是整数,增加小数点再补0
  135. if(rs < 0){
  136. rs = s.length;
  137. s += '.';
  138. }
  139. while(s.length <= rs + n){
  140. s += '0';
  141. }
  142. s = start + s;
  143. return s;
  144. }