scMathUtil.js 1.9 KB

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