@jdsalasc/solvejs-numbers 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,10 @@ exports.average = average;
7
7
  exports.median = median;
8
8
  exports.percent = percent;
9
9
  exports.randomInt = randomInt;
10
+ exports.safeDivide = safeDivide;
11
+ exports.percentChange = percentChange;
12
+ exports.isBetween = isBetween;
13
+ exports.toCurrency = toCurrency;
10
14
  /**
11
15
  * Ensures a number is finite.
12
16
  *
@@ -146,4 +150,74 @@ function randomInt(min, max) {
146
150
  }
147
151
  return Math.floor(Math.random() * (max - min + 1)) + min;
148
152
  }
153
+ /**
154
+ * Safely divides two numbers with a fallback value.
155
+ *
156
+ * @param numerator - Dividend.
157
+ * @param denominator - Divisor.
158
+ * @param fallback - Value returned when denominator is zero.
159
+ * @returns Division result or fallback when denominator is zero.
160
+ * @throws {TypeError} If numeric inputs are not finite.
161
+ */
162
+ function safeDivide(numerator, denominator, fallback = 0) {
163
+ assertFinite(numerator, "numerator");
164
+ assertFinite(denominator, "denominator");
165
+ assertFinite(fallback, "fallback");
166
+ if (denominator === 0) {
167
+ return fallback;
168
+ }
169
+ return numerator / denominator;
170
+ }
171
+ /**
172
+ * Calculates percentual change from `previous` to `current`.
173
+ *
174
+ * @param current - Current value.
175
+ * @param previous - Previous value.
176
+ * @param decimals - Decimal precision.
177
+ * @returns Percentual change where 10 means +10%.
178
+ * @throws {TypeError} If values are not finite.
179
+ * @throws {RangeError} If `previous` is zero.
180
+ */
181
+ function percentChange(current, previous, decimals = 2) {
182
+ assertFinite(current, "current");
183
+ assertFinite(previous, "previous");
184
+ if (previous === 0) {
185
+ throw new RangeError("Cannot compute percent change when previous is zero.");
186
+ }
187
+ return roundTo(((current - previous) / Math.abs(previous)) * 100, decimals);
188
+ }
189
+ /**
190
+ * Checks if a value is inside an interval.
191
+ *
192
+ * @param value - Number to evaluate.
193
+ * @param min - Lower bound.
194
+ * @param max - Upper bound.
195
+ * @param inclusive - Whether bounds are inclusive.
196
+ * @returns `true` if value is in range.
197
+ */
198
+ function isBetween(value, min, max, inclusive = true) {
199
+ assertFinite(value, "value");
200
+ assertFinite(min, "min");
201
+ assertFinite(max, "max");
202
+ if (min > max) {
203
+ throw new RangeError("Expected min to be less than or equal to max.");
204
+ }
205
+ return inclusive ? value >= min && value <= max : value > min && value < max;
206
+ }
207
+ /**
208
+ * Formats a number as currency using `Intl.NumberFormat`.
209
+ *
210
+ * @param value - Numeric value to format.
211
+ * @param currency - ISO 4217 currency code.
212
+ * @param locale - BCP 47 locale tag.
213
+ * @returns Formatted currency string.
214
+ * @throws {TypeError} If `value` is not finite.
215
+ */
216
+ function toCurrency(value, currency = "USD", locale = "en-US") {
217
+ assertFinite(value, "value");
218
+ return new Intl.NumberFormat(locale, {
219
+ style: "currency",
220
+ currency
221
+ }).format(value);
222
+ }
149
223
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -67,3 +67,44 @@ export declare function percent(part: number, total: number, decimals?: number):
67
67
  * @throws {RangeError} If `min` is greater than `max`.
68
68
  */
69
69
  export declare function randomInt(min: number, max: number): number;
70
+ /**
71
+ * Safely divides two numbers with a fallback value.
72
+ *
73
+ * @param numerator - Dividend.
74
+ * @param denominator - Divisor.
75
+ * @param fallback - Value returned when denominator is zero.
76
+ * @returns Division result or fallback when denominator is zero.
77
+ * @throws {TypeError} If numeric inputs are not finite.
78
+ */
79
+ export declare function safeDivide(numerator: number, denominator: number, fallback?: number): number;
80
+ /**
81
+ * Calculates percentual change from `previous` to `current`.
82
+ *
83
+ * @param current - Current value.
84
+ * @param previous - Previous value.
85
+ * @param decimals - Decimal precision.
86
+ * @returns Percentual change where 10 means +10%.
87
+ * @throws {TypeError} If values are not finite.
88
+ * @throws {RangeError} If `previous` is zero.
89
+ */
90
+ export declare function percentChange(current: number, previous: number, decimals?: number): number;
91
+ /**
92
+ * Checks if a value is inside an interval.
93
+ *
94
+ * @param value - Number to evaluate.
95
+ * @param min - Lower bound.
96
+ * @param max - Upper bound.
97
+ * @param inclusive - Whether bounds are inclusive.
98
+ * @returns `true` if value is in range.
99
+ */
100
+ export declare function isBetween(value: number, min: number, max: number, inclusive?: boolean): boolean;
101
+ /**
102
+ * Formats a number as currency using `Intl.NumberFormat`.
103
+ *
104
+ * @param value - Numeric value to format.
105
+ * @param currency - ISO 4217 currency code.
106
+ * @param locale - BCP 47 locale tag.
107
+ * @returns Formatted currency string.
108
+ * @throws {TypeError} If `value` is not finite.
109
+ */
110
+ export declare function toCurrency(value: number, currency?: string, locale?: string): string;
package/dist/esm/index.js CHANGED
@@ -137,4 +137,74 @@ export function randomInt(min, max) {
137
137
  }
138
138
  return Math.floor(Math.random() * (max - min + 1)) + min;
139
139
  }
140
+ /**
141
+ * Safely divides two numbers with a fallback value.
142
+ *
143
+ * @param numerator - Dividend.
144
+ * @param denominator - Divisor.
145
+ * @param fallback - Value returned when denominator is zero.
146
+ * @returns Division result or fallback when denominator is zero.
147
+ * @throws {TypeError} If numeric inputs are not finite.
148
+ */
149
+ export function safeDivide(numerator, denominator, fallback = 0) {
150
+ assertFinite(numerator, "numerator");
151
+ assertFinite(denominator, "denominator");
152
+ assertFinite(fallback, "fallback");
153
+ if (denominator === 0) {
154
+ return fallback;
155
+ }
156
+ return numerator / denominator;
157
+ }
158
+ /**
159
+ * Calculates percentual change from `previous` to `current`.
160
+ *
161
+ * @param current - Current value.
162
+ * @param previous - Previous value.
163
+ * @param decimals - Decimal precision.
164
+ * @returns Percentual change where 10 means +10%.
165
+ * @throws {TypeError} If values are not finite.
166
+ * @throws {RangeError} If `previous` is zero.
167
+ */
168
+ export function percentChange(current, previous, decimals = 2) {
169
+ assertFinite(current, "current");
170
+ assertFinite(previous, "previous");
171
+ if (previous === 0) {
172
+ throw new RangeError("Cannot compute percent change when previous is zero.");
173
+ }
174
+ return roundTo(((current - previous) / Math.abs(previous)) * 100, decimals);
175
+ }
176
+ /**
177
+ * Checks if a value is inside an interval.
178
+ *
179
+ * @param value - Number to evaluate.
180
+ * @param min - Lower bound.
181
+ * @param max - Upper bound.
182
+ * @param inclusive - Whether bounds are inclusive.
183
+ * @returns `true` if value is in range.
184
+ */
185
+ export function isBetween(value, min, max, inclusive = true) {
186
+ assertFinite(value, "value");
187
+ assertFinite(min, "min");
188
+ assertFinite(max, "max");
189
+ if (min > max) {
190
+ throw new RangeError("Expected min to be less than or equal to max.");
191
+ }
192
+ return inclusive ? value >= min && value <= max : value > min && value < max;
193
+ }
194
+ /**
195
+ * Formats a number as currency using `Intl.NumberFormat`.
196
+ *
197
+ * @param value - Numeric value to format.
198
+ * @param currency - ISO 4217 currency code.
199
+ * @param locale - BCP 47 locale tag.
200
+ * @returns Formatted currency string.
201
+ * @throws {TypeError} If `value` is not finite.
202
+ */
203
+ export function toCurrency(value, currency = "USD", locale = "en-US") {
204
+ assertFinite(value, "value");
205
+ return new Intl.NumberFormat(locale, {
206
+ style: "currency",
207
+ currency
208
+ }).format(value);
209
+ }
140
210
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jdsalasc/solvejs-numbers",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "Number utilities for rounding, percentages, clamping, median, average, and safe math helpers.",
5
5
  "license": "MIT",
6
6
  "type": "module",