NumberDecimal.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  8. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  9. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  10. var _numberUtil = require("./numberUtil");
  11. /**
  12. * We can remove this when IE not support anymore
  13. */
  14. var NumberDecimal = /*#__PURE__*/function () {
  15. function NumberDecimal(value) {
  16. (0, _classCallCheck2.default)(this, NumberDecimal);
  17. (0, _defineProperty2.default)(this, "origin", '');
  18. (0, _defineProperty2.default)(this, "number", void 0);
  19. (0, _defineProperty2.default)(this, "empty", void 0);
  20. if ((0, _numberUtil.isEmpty)(value)) {
  21. this.empty = true;
  22. return;
  23. }
  24. this.origin = String(value);
  25. this.number = Number(value);
  26. }
  27. (0, _createClass2.default)(NumberDecimal, [{
  28. key: "negate",
  29. value: function negate() {
  30. return new NumberDecimal(-this.toNumber());
  31. }
  32. }, {
  33. key: "add",
  34. value: function add(value) {
  35. if (this.isInvalidate()) {
  36. return new NumberDecimal(value);
  37. }
  38. var target = Number(value);
  39. if (Number.isNaN(target)) {
  40. return this;
  41. }
  42. var number = this.number + target;
  43. // [Legacy] Back to safe integer
  44. if (number > Number.MAX_SAFE_INTEGER) {
  45. return new NumberDecimal(Number.MAX_SAFE_INTEGER);
  46. }
  47. if (number < Number.MIN_SAFE_INTEGER) {
  48. return new NumberDecimal(Number.MIN_SAFE_INTEGER);
  49. }
  50. var maxPrecision = Math.max((0, _numberUtil.getNumberPrecision)(this.number), (0, _numberUtil.getNumberPrecision)(target));
  51. return new NumberDecimal(number.toFixed(maxPrecision));
  52. }
  53. }, {
  54. key: "multi",
  55. value: function multi(value) {
  56. var target = Number(value);
  57. if (this.isInvalidate() || Number.isNaN(target)) {
  58. return new NumberDecimal(NaN);
  59. }
  60. var number = this.number * target;
  61. // [Legacy] Back to safe integer
  62. if (number > Number.MAX_SAFE_INTEGER) {
  63. return new NumberDecimal(Number.MAX_SAFE_INTEGER);
  64. }
  65. if (number < Number.MIN_SAFE_INTEGER) {
  66. return new NumberDecimal(Number.MIN_SAFE_INTEGER);
  67. }
  68. var maxPrecision = Math.max((0, _numberUtil.getNumberPrecision)(this.number), (0, _numberUtil.getNumberPrecision)(target));
  69. return new NumberDecimal(number.toFixed(maxPrecision));
  70. }
  71. }, {
  72. key: "isEmpty",
  73. value: function isEmpty() {
  74. return this.empty;
  75. }
  76. }, {
  77. key: "isNaN",
  78. value: function isNaN() {
  79. return Number.isNaN(this.number);
  80. }
  81. }, {
  82. key: "isInvalidate",
  83. value: function isInvalidate() {
  84. return this.isEmpty() || this.isNaN();
  85. }
  86. }, {
  87. key: "equals",
  88. value: function equals(target) {
  89. return this.toNumber() === (target === null || target === void 0 ? void 0 : target.toNumber());
  90. }
  91. }, {
  92. key: "lessEquals",
  93. value: function lessEquals(target) {
  94. return this.add(target.negate().toString()).toNumber() <= 0;
  95. }
  96. }, {
  97. key: "toNumber",
  98. value: function toNumber() {
  99. return this.number;
  100. }
  101. }, {
  102. key: "toString",
  103. value: function toString() {
  104. var safe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  105. if (!safe) {
  106. return this.origin;
  107. }
  108. if (this.isInvalidate()) {
  109. return '';
  110. }
  111. return (0, _numberUtil.num2str)(this.number);
  112. }
  113. }]);
  114. return NumberDecimal;
  115. }();
  116. exports.default = NumberDecimal;