Browse Source

Add roundDown option to ShortNumberPipe

Add optional roundDown parameter that uses Math.floor instead of
Math.round when abbreviating numbers. This prevents values like
3993979 from rounding up to 4M, showing 3.9M instead.

Also improve typing: replace any with ShortNumberArgs interface
and ensure transform always returns string.
pull/15396/head
Vladyslav_Prykhodko 6 months ago
committed by Vladyslav Prykhodko
parent
commit
9aecf0ba87
  1. 22
      ui-ngx/src/app/shared/pipe/short-number.pipe.ts

22
ui-ngx/src/app/shared/pipe/short-number.pipe.ts

@ -16,20 +16,26 @@
import { Pipe, PipeTransform } from '@angular/core'; import { Pipe, PipeTransform } from '@angular/core';
export interface ShortNumberArgs {
long?: boolean;
roundDown?: boolean;
}
@Pipe({ @Pipe({
name: 'shortNumber', name: 'shortNumber',
standalone: false standalone: false
}) })
export class ShortNumberPipe implements PipeTransform { export class ShortNumberPipe implements PipeTransform {
transform(number: number, args?: any): any { transform(number: number, args?: ShortNumberArgs): string {
if (isNaN(number)) return 0; if (isNaN(number)) return '0';
if (number === null) return 0; if (number === null) return '0';
if (number === 0) return 0; if (number === 0) return '0';
let abs = Math.abs(number); let abs = Math.abs(number);
const rounder = Math.pow(10, 1); const rounder = Math.pow(10, 1);
const isNegative = number < 0; const isNegative = number < 0;
const isLong = args && args.long; const isLong = args?.long;
const roundDown = args?.roundDown;
let key = ''; let key = '';
const powers = [ const powers = [
@ -42,7 +48,7 @@ export class ShortNumberPipe implements PipeTransform {
for (let i = 0; i < powers.length; i++) { for (let i = 0; i < powers.length; i++) {
let reduced = abs / powers[i].value; let reduced = abs / powers[i].value;
reduced = Math.round(reduced * rounder) / rounder; reduced = (roundDown ? Math.floor : Math.round)(reduced * rounder) / rounder;
if (reduced >= 1) { if (reduced >= 1) {
abs = reduced; abs = reduced;
key = isLong ? powers[i].longKey : powers[i].key; key = isLong ? powers[i].longKey : powers[i].key;

Loading…
Cancel
Save