Number.js

  1. /**
  2. * @namespace Number
  3. */
  4. /**
  5. * Check if given number is number
  6. *
  7. * @memberof Number
  8. * @param {*} n Number to check
  9. * @returns {boolean} Verdict
  10. */
  11. function isNumber(n) {
  12. return n === Number(n);
  13. }
  14. /**
  15. * Check if given number is negative zero (-0)
  16. *
  17. * @memberof Number
  18. * @param {number} n Number to check
  19. * @returns {boolean} Verdict
  20. */
  21. function isNegativeZero(n) {
  22. return 1 / n === -Infinity;
  23. }
  24. /**
  25. * Polyfill for ECMAScript 2015 for Number.isInteger
  26. *
  27. * @memberof Number
  28. * @param {number} n Number to check
  29. * @returns {boolean} Verdict
  30. */
  31. function isInteger(n) {
  32. return Number.isNumber(n) && n % 1 === 0;
  33. }
  34. /**
  35. * Check if given number is natural (this function assumes that 0 is also natural)
  36. *
  37. * @memberof Number
  38. * @param {number} n Number to check
  39. * @returns {boolean} Verdict
  40. */
  41. function isNatural(n) {
  42. return Number.isInteger(n) && n >= 0 && !Number.isNegativeZero(n);
  43. }
  44. /**
  45. * Check if given number is float
  46. *
  47. * @memberof Number
  48. * @param {number} n Number to check
  49. * @returns {boolean} Verdict
  50. */
  51. function isFloat(n){
  52. return Number.isNumber(n) && n % 1 !== 0;
  53. }
  54. /**
  55. * Returns string padded with leading zeros to length equal given length
  56. *
  57. * @memberof Number.prototype
  58. * @param {number} padding Length to which number should be padded
  59. * @returns {string} Padded string
  60. */
  61. function pad(padding) {
  62. let value = this.toString();
  63. const pointIndex = value.indexOf('.');
  64. let toAdd = padding;
  65. if(pointIndex > -1) {
  66. toAdd -= pointIndex;
  67. } else {
  68. toAdd -= value.length;
  69. }
  70. for(let i = 0; i < toAdd; i++) {
  71. value = '0' + value;
  72. }
  73. return value;
  74. }
  75. export default {
  76. static: {
  77. isNumber,
  78. isNegativeZero,
  79. isInteger,
  80. isNatural,
  81. isFloat
  82. },
  83. method: {
  84. pad
  85. }
  86. };