compute.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /* 加减乘除精度计算 */
  2. //相加
  3. export const addNum = function addNum(arg1: number, arg2: number): number {
  4. arg1 = arg1 ? arg1 : 0;
  5. arg2 = arg2 ? arg2 : 0;
  6. let r1, r2, m, c;
  7. try {
  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. c = Math.abs(r1 - r2);
  18. m = Math.pow(10, Math.max(r1, r2));
  19. if (c > 0) {
  20. let cm = Math.pow(10, c);
  21. if (r1 > r2) {
  22. arg1 = Number(arg1.toString().replace('.', ''));
  23. arg2 = Number(arg2.toString().replace('.', '')) * cm;
  24. } else {
  25. arg1 = Number(arg1.toString().replace('.', '')) * cm;
  26. arg2 = Number(arg2.toString().replace('.', ''));
  27. }
  28. } else {
  29. arg1 = Number(arg1.toString().replace('.', ''));
  30. arg2 = Number(arg2.toString().replace('.', ''));
  31. }
  32. return (arg1 + arg2) / m;
  33. };
  34. //减法
  35. export const subtraction = function subtraction(
  36. num1: number,
  37. num2: number
  38. ): number {
  39. var r1, r2, m, floatNum;
  40. try {
  41. r1 = num1.toString().split('.')[1].length;
  42. } catch (e) {
  43. r1 = 0;
  44. }
  45. try {
  46. r2 = num2.toString().split('.')[1].length;
  47. } catch (e) {
  48. r2 = 0;
  49. }
  50. m = Math.pow(10, Math.max(r1, r2));
  51. return (num1 * m - num2 * m) / m;
  52. };
  53. //相乘
  54. export const multiply = function multiply(arg1: number, arg2: number): number {
  55. arg1 = arg1 ? arg1 : 0;
  56. arg2 = arg2 ? arg2 : 0;
  57. let r1, r2, m, c;
  58. try {
  59. r1 = arg1.toString().split('.')[1].length;
  60. } catch (e) {
  61. r1 = 0;
  62. }
  63. try {
  64. r2 = arg2.toString().split('.')[1].length;
  65. } catch (e) {
  66. r2 = 0;
  67. }
  68. c = Math.abs(r1 - r2);
  69. m = Math.pow(10, Math.max(r1, r2) * 2);
  70. if (c > 0) {
  71. let cm = Math.pow(10, c);
  72. if (r1 > r2) {
  73. arg1 = Number(arg1.toString().replace('.', ''));
  74. arg2 = Number(arg2.toString().replace('.', '')) * cm;
  75. } else {
  76. arg1 = Number(arg1.toString().replace('.', '')) * cm;
  77. arg2 = Number(arg2.toString().replace('.', ''));
  78. }
  79. } else {
  80. arg1 = Number(arg1.toString().replace('.', ''));
  81. arg2 = Number(arg2.toString().replace('.', ''));
  82. }
  83. return (arg1 * arg2) / m;
  84. };
  85. //相除
  86. export const accDiv = function accDiv(arg1: number, arg2: number): number {
  87. var t1 = 0,
  88. t2 = 0,
  89. r1,
  90. r2;
  91. try {
  92. t1 = arg1.toString().split('.')[1].length;
  93. } catch (e) {}
  94. try {
  95. t2 = arg2.toString().split('.')[1].length;
  96. } catch (e) {}
  97. r1 = Number(arg1.toString().replace('.', ''));
  98. r2 = Number(arg2.toString().replace('.', ''));
  99. let n = (r1 / r2) * Math.pow(10, t2 - t1);
  100. return Math.round(n)
  101. }