I am working on an angular app. I have few number which I need to display. Those numbers can be like 1234567.87876868. While displaying this number I need to show in format like 12.9k and my code to make number in this form is
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'number'
})
export class numberPipe implements PipeTransform {
transform(number: number, args?: any): any {
if (isNaN(number)) return 0; // will only work value is a number
if (number === null) return 0;
if (number === 0) return 0;
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, 5)},
{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;
}
}
in html <div>{{ mynumber | number}}<div>
Now that problem with this is If number is less that 1000 it shows original number and which shows like this 345.4354564 which does not look good on screen. So I need to use number pipe( number: '1.2-2')
. But when I use number pipe with my custom pipe it doesnot work. It says '12.4K is not a number for pipe Decimalpipe'. How can I handle both the scenarios?