Improve numbering format for small numbers

This commit is contained in:
Matthias 2022-04-09 10:41:39 +02:00
parent 3d7876957b
commit a158605303
2 changed files with 25 additions and 4 deletions

View File

@ -9,11 +9,18 @@ export function formatPercent(value: number, decimals = 3): string {
/**
* Format number to `decimals` without trailing zeros
* @param value Number to format
* @param decimals number of decimals (Defaults to 8)
* @param decimals number of decimals (Defaults to 15)
* @returns Formatted string
*/
export function formatPrice(value: number, decimals = 8): string {
return !isUndefined(value) ? parseFloat(value.toFixed(decimals)).toString() : '';
export function formatPrice(value: number, decimals = 15): string {
// const format = new Intl.NumberFormat('', {maximumFractionDigits: decimals}
// return !isUndefined(value) ? parseFloat(value.toFixed(decimals)).toString() : '';
return !isUndefined(value)
? value.toLocaleString('fullwide', {
useGrouping: false,
maximumFractionDigits: decimals,
})
: '';
}
/**

View File

@ -1,4 +1,4 @@
import { formatPercent, formatPriceCurrency } from '@/shared/formatters';
import { formatPercent, formatPrice, formatPriceCurrency } from '@/shared/formatters';
describe('formatters.ts', () => {
it('Format percent correctly', () => {
@ -9,5 +9,19 @@ describe('formatters.ts', () => {
expect(formatPriceCurrency(5123.551123, 'USDT', 3)).toEqual('5123.551 USDT');
expect(formatPriceCurrency(5123.551123, 'USDT')).toEqual('5123.551 USDT');
expect(formatPriceCurrency(5123.551123, 'USDT', 5)).toEqual('5123.55112 USDT');
expect(formatPriceCurrency(5123.5511230000000001, 'USDT', 5)).toEqual('5123.55112 USDT');
expect(formatPriceCurrency(0.00001, 'BTC', 5)).toEqual('0.00001 BTC');
});
it('Format price correctly', () => {
expect(formatPrice(5123.5123512)).toEqual('5123.5123512');
expect(formatPrice(5123.5123512, 8)).toEqual('5123.5123512');
expect(formatPrice(5123.5123512, 3)).toEqual('5123.512');
expect(formatPrice(5123.51200000000000001, 8)).toEqual('5123.512');
expect(formatPrice(0.001, 3)).toEqual('0.001');
expect(formatPrice(0.0019, 3)).toEqual('0.002');
expect(formatPrice(2.701e-9, 3)).toEqual('0');
expect(formatPrice(2.701e-9, 8)).toEqual('0');
expect(formatPrice(2.701e-9, 11)).toEqual('0.0000000027');
});
});