scMathUtil.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /**
  2. * Created by jimiz on 2017/3/28.
  3. */
  4. let scMathUtil = {
  5. innerRoundTo: function(num, digit){
  6. let lFactor = Math.pow(10, digit);
  7. let fOffSet = 0.5;
  8. let sign = '';
  9. if (num < 0){
  10. sign = '-';
  11. num = Math.abs(num);
  12. }
  13. let result = Math.floor((num / lFactor) + fOffSet).toString();
  14. let iLength = result.length;
  15. let r1 = result.substring(0, iLength + digit);
  16. let r2 = result.substring(iLength + digit, iLength);
  17. return Number(sign + r1 + '.' + r2);
  18. },
  19. floatToBin: function(num) {
  20. return num.toString(2);
  21. },
  22. binToFloat: function(bin) {
  23. let result = 0;
  24. let iLength = bin.length;
  25. let sign = '';
  26. if (iLength > 0 && bin[0]==='-'){
  27. sign = '-';
  28. bin = bin.substring(1, iLength);
  29. }
  30. iLength = bin.length;
  31. let iDot = bin.indexOf('.');
  32. if (iDot >= 0) {
  33. for (let i = 0; i < iLength; i++) {
  34. let num = Number(bin[i]);
  35. let idx = iDot - i;
  36. if (idx === 0) {
  37. continue
  38. };
  39. if (idx > 0) {
  40. idx -= 1
  41. };
  42. let r = Math.pow(2, idx);
  43. result += num * r;
  44. }
  45. }
  46. else {
  47. result = parseInt(bin, 2);
  48. };
  49. return sign + result;
  50. },
  51. incMantissa: function(bin){
  52. let result = bin;
  53. let iDot = bin.indexOf('.');
  54. if (iDot < 0){return result};
  55. let iLength = bin.length;
  56. for (let i = iLength - 1; i > iDot; i--){
  57. let num = Number(bin[i]);
  58. if (num === 0){
  59. num = 1;
  60. let bin1 = bin.substring(0, i);
  61. let bin2 = bin.substring(i + 1, iLength);
  62. result = bin1 + num.toString() + bin2;
  63. break;
  64. }
  65. };
  66. return result;
  67. },
  68. roundTo: function(num, digit){
  69. let me = this;
  70. return me.innerRoundTo(me.binToFloat(me.incMantissa(me.floatToBin(num))), digit);
  71. }
  72. };