ui-formatter 0.1.0 → 0.1.1
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.
- package/lib/index.js +74 -21
- package/package.json +1 -1
- package/src/index.ts +102 -21
package/lib/index.js
CHANGED
|
@@ -141,35 +141,88 @@ function pad3(n) {
|
|
|
141
141
|
}
|
|
142
142
|
return n < 10 ? "00" + n : "0" + n.toString();
|
|
143
143
|
}
|
|
144
|
-
function
|
|
145
|
-
if (
|
|
144
|
+
function formatInteger(v, groupSeparator) {
|
|
145
|
+
if (groupSeparator === void 0) { groupSeparator = ","; }
|
|
146
|
+
if (v == null || !Number.isFinite(v)) {
|
|
146
147
|
return "";
|
|
147
148
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
var isNegative = v < 0;
|
|
150
|
+
var n = Math.abs(Math.trunc(v));
|
|
151
|
+
if (n < 1000) {
|
|
152
|
+
return isNegative ? "-" + n : "" + n;
|
|
151
153
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
+
var buffer = new Array(32);
|
|
155
|
+
var i = buffer.length;
|
|
156
|
+
var digitCount = 0;
|
|
157
|
+
while (n > 0) {
|
|
158
|
+
if (digitCount > 0 && digitCount % 3 === 0) {
|
|
159
|
+
buffer[--i] = groupSeparator;
|
|
160
|
+
}
|
|
161
|
+
var digit = n % 10;
|
|
162
|
+
buffer[--i] = String.fromCharCode(48 + digit);
|
|
163
|
+
n = Math.floor(n / 10);
|
|
164
|
+
digitCount++;
|
|
165
|
+
}
|
|
166
|
+
if (isNegative) {
|
|
167
|
+
buffer[--i] = "-";
|
|
154
168
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
169
|
+
return buffer.slice(i).join("");
|
|
170
|
+
}
|
|
171
|
+
exports.formatInteger = formatInteger;
|
|
172
|
+
function formatNumber(v, precision, decimalSeparator, groupSeparator) {
|
|
173
|
+
if (precision === void 0) { precision = 0; }
|
|
174
|
+
if (v == null || !Number.isFinite(v)) {
|
|
175
|
+
return "";
|
|
176
|
+
}
|
|
177
|
+
var d = ".";
|
|
178
|
+
var g = ",";
|
|
179
|
+
if (decimalSeparator && groupSeparator) {
|
|
180
|
+
d = decimalSeparator;
|
|
181
|
+
g = groupSeparator;
|
|
182
|
+
}
|
|
183
|
+
else if (decimalSeparator && !groupSeparator) {
|
|
184
|
+
d = decimalSeparator;
|
|
185
|
+
if (d === "٫") {
|
|
186
|
+
g = "٬";
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
g = d === "," ? "." : ",";
|
|
164
190
|
}
|
|
165
191
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
192
|
+
var negative = v < 0;
|
|
193
|
+
var s = Math.abs(v).toFixed(precision);
|
|
194
|
+
var dot = s.indexOf(".");
|
|
195
|
+
var intEnd = dot >= 0 ? dot : s.length;
|
|
196
|
+
var fracLen = dot >= 0 ? s.length - dot - 1 : 0;
|
|
197
|
+
var intLen = intEnd;
|
|
198
|
+
var groups = intLen > 3 ? ((intLen - 1) / 3) | 0 : 0;
|
|
199
|
+
var outLen = (negative ? 1 : 0) + intLen + groups * g.length + (fracLen > 0 ? d.length + fracLen : 0);
|
|
200
|
+
var out = new Array(outLen);
|
|
201
|
+
var p = 0;
|
|
202
|
+
if (negative) {
|
|
203
|
+
out[p++] = "-";
|
|
204
|
+
}
|
|
205
|
+
var firstGroup = intLen % 3;
|
|
206
|
+
if (firstGroup === 0) {
|
|
207
|
+
firstGroup = 3;
|
|
169
208
|
}
|
|
170
|
-
|
|
171
|
-
|
|
209
|
+
for (var i = 0; i < intLen; i++) {
|
|
210
|
+
if (i > 0 && (i === firstGroup || (i > firstGroup && (i - firstGroup) % 3 === 0))) {
|
|
211
|
+
for (var j = 0; j < g.length; j++) {
|
|
212
|
+
out[p++] = g[j];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
out[p++] = s[i];
|
|
216
|
+
}
|
|
217
|
+
if (fracLen > 0) {
|
|
218
|
+
for (var j = 0; j < d.length; j++) {
|
|
219
|
+
out[p++] = d[j];
|
|
220
|
+
}
|
|
221
|
+
for (var i = dot + 1; i < s.length; i++) {
|
|
222
|
+
out[p++] = s[i];
|
|
223
|
+
}
|
|
172
224
|
}
|
|
225
|
+
return out.join("");
|
|
173
226
|
}
|
|
174
227
|
exports.formatNumber = formatNumber;
|
|
175
228
|
var formatter = (function () {
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -140,33 +140,114 @@ function pad3(n: number): string {
|
|
|
140
140
|
return n < 10 ? "00" + n : "0" + n.toString()
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
export function
|
|
144
|
-
if (v == null) {
|
|
143
|
+
export function formatInteger(v: number | null | undefined, groupSeparator: string = ","): any {
|
|
144
|
+
if (v == null || !Number.isFinite(v)) {
|
|
145
145
|
return ""
|
|
146
146
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
147
|
+
|
|
148
|
+
const isNegative = v < 0
|
|
149
|
+
let n = Math.abs(Math.trunc(v))
|
|
150
|
+
|
|
151
|
+
// Fast path
|
|
152
|
+
if (n < 1000) {
|
|
153
|
+
return isNegative ? `-${n}` : `${n}`
|
|
152
154
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
155
|
+
|
|
156
|
+
// Max length:
|
|
157
|
+
// digits (up to 16 for JS safe int) + separators (~5) + sign
|
|
158
|
+
const buffer = new Array(32)
|
|
159
|
+
let i = buffer.length
|
|
160
|
+
|
|
161
|
+
let digitCount = 0
|
|
162
|
+
|
|
163
|
+
while (n > 0) {
|
|
164
|
+
// Insert separator every 3 digits
|
|
165
|
+
if (digitCount > 0 && digitCount % 3 === 0) {
|
|
166
|
+
buffer[--i] = groupSeparator
|
|
162
167
|
}
|
|
168
|
+
|
|
169
|
+
const digit = n % 10
|
|
170
|
+
buffer[--i] = String.fromCharCode(48 + digit)
|
|
171
|
+
|
|
172
|
+
n = Math.floor(n / 10) // safe version
|
|
173
|
+
digitCount++
|
|
163
174
|
}
|
|
164
|
-
|
|
165
|
-
if (
|
|
166
|
-
|
|
167
|
-
} else {
|
|
168
|
-
return arr.reverse().join("") + d + x[1]
|
|
175
|
+
|
|
176
|
+
if (isNegative) {
|
|
177
|
+
buffer[--i] = "-"
|
|
169
178
|
}
|
|
179
|
+
|
|
180
|
+
// Slice only used portion and join once
|
|
181
|
+
return buffer.slice(i).join("")
|
|
182
|
+
}
|
|
183
|
+
export function formatNumber(v?: number | null, precision = 0, decimalSeparator?: string | null, groupSeparator?: string | null): any {
|
|
184
|
+
if (v == null || !Number.isFinite(v)) {
|
|
185
|
+
return ""
|
|
186
|
+
}
|
|
187
|
+
let d = "."
|
|
188
|
+
let g = ","
|
|
189
|
+
if (decimalSeparator && groupSeparator) {
|
|
190
|
+
d = decimalSeparator
|
|
191
|
+
g = groupSeparator
|
|
192
|
+
} else if (decimalSeparator && !groupSeparator) {
|
|
193
|
+
d = decimalSeparator
|
|
194
|
+
if (d === "٫") {
|
|
195
|
+
g = "٬"
|
|
196
|
+
} else {
|
|
197
|
+
g = d === "," ? "." : ","
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const negative = v < 0
|
|
201
|
+
|
|
202
|
+
// unavoidable allocation
|
|
203
|
+
const s = Math.abs(v).toFixed(precision)
|
|
204
|
+
|
|
205
|
+
const dot = s.indexOf(".")
|
|
206
|
+
|
|
207
|
+
const intEnd = dot >= 0 ? dot : s.length
|
|
208
|
+
const fracLen = dot >= 0 ? s.length - dot - 1 : 0
|
|
209
|
+
|
|
210
|
+
const intLen = intEnd
|
|
211
|
+
const groups = intLen > 3 ? ((intLen - 1) / 3) | 0 : 0
|
|
212
|
+
|
|
213
|
+
const outLen = (negative ? 1 : 0) + intLen + groups * g.length + (fracLen > 0 ? d.length + fracLen : 0)
|
|
214
|
+
|
|
215
|
+
const out = new Array<string>(outLen)
|
|
216
|
+
|
|
217
|
+
let p = 0
|
|
218
|
+
|
|
219
|
+
if (negative) {
|
|
220
|
+
out[p++] = "-"
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// integer part
|
|
224
|
+
let firstGroup = intLen % 3
|
|
225
|
+
if (firstGroup === 0) {
|
|
226
|
+
firstGroup = 3
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
for (let i = 0; i < intLen; i++) {
|
|
230
|
+
if (i > 0 && (i === firstGroup || (i > firstGroup && (i - firstGroup) % 3 === 0))) {
|
|
231
|
+
for (let j = 0; j < g.length; j++) {
|
|
232
|
+
out[p++] = g[j]
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
out[p++] = s[i]
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// fractional part
|
|
240
|
+
if (fracLen > 0) {
|
|
241
|
+
for (let j = 0; j < d.length; j++) {
|
|
242
|
+
out[p++] = d[j]
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
for (let i = dot + 1; i < s.length; i++) {
|
|
246
|
+
out[p++] = s[i]
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return out.join("")
|
|
170
251
|
}
|
|
171
252
|
|
|
172
253
|
// tslint:disable-next-line:class-name
|