typescript - Kilo Formatter med Angular Pipe


Jag har precis börjat lära mig TypeScript med nybörjarexempel.

Jag vill skapa ett rör för att konvertera int till kilo. Till exempel om input=1234 returnera 1.2K

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'kiloFormater' })
export class KiloFormaterPipe implements PipeTransform {
    transform(num: number): string {
        if (num >= 1000000000)
            return (num / 1000000000).toString() + 'B';

        if (num >= 1000000)
            return (num / 1000000).toString() + 'M';

        if (num >= 1000)
            return (num / 1000).toString() + 'K';

        return num.toString(); 
    }
}

Redigera Den här koden returnerar 1K, men jag vill veta hur jag kan få 1,2K.

Jag kan göra det i C# med en extension

public static string FormatNumber(this long num)
{
    if (num >= 100000000) {
        return (num / 1000000D).ToString("0.#M");
    }
    if (num >= 1000000) {
        return (num / 1000000D).ToString("0.##M");
    }
    if (num >= 100000) {
        return (num / 1000D).ToString("0.#k");
    }
    if (num >= 10000) {
        return (num / 1000D).ToString("0.##k");
    }

    return num.ToString("#,0");
}

Svar #1

Du kan använda toFixed(n) för att omvandla ett tal till en sträng med en godtycklig precision på n decimaler.

function transform (value) {
  if (value >= 1e6) return (value / 1e6).toFixed(1) + 'M'
  if (value >= 1e3) return (value / 1e3).toFixed(1) + 'K'
  return value.toString()
}

console.log(transform(1234))
console.log(transform(1234567))

Svar #2

Tack till Lazar Ljubenović:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'kiloFormater' })
export class KiloFormaterPipe implements PipeTransform {
    transform(value: any): string {
        if (value >= 1e9) return (value / 1e9).toFixed(1) + 'B'
        if (value >= 1e6) return (value / 1e6).toFixed(1) + 'M'
        if (value >= 1e3) return (value / 1e3).toFixed(1) + 'K'
        return value.toString()
    }
}