Files
dspace-angular/src/app/shared/utils/short-number.pipe.ts
2023-02-02 15:54:04 +01:00

41 lines
1.0 KiB
TypeScript

import { Pipe, PipeTransform } from '@angular/core';
import { isEmpty } from '../empty.util';
@Pipe({
name: 'dsShortNumber'
})
export class ShortNumberPipe implements PipeTransform {
transform(number: number, args?: any): any {
// will only work value is a valid number
if (isNaN(number) || isEmpty(number) || number === 0) {
return number;
}
let abs = Math.abs(number);
const rounder = Math.pow(10, 1);
const isNegative = number < 0; // will also work for Negetive numbers
let key = '';
const powers = [
{key: 'Q', value: Math.pow(10, 15)},
{key: 'T', value: Math.pow(10, 12)},
{key: 'B', value: Math.pow(10, 9)},
{key: 'M', value: Math.pow(10, 6)},
{key: 'K', value: 1000}
];
for (let i = 0; i < powers.length; i++) {
let reduced = abs / powers[i].value;
reduced = Math.round(reduced * rounder) / rounder;
if (reduced >= 1) {
abs = reduced;
key = powers[i].key;
break;
}
}
return (isNegative ? '-' : '') + abs + key;
}
}