Formatowanie liczb (JavaScript)

Witam !

Mam taki problem… nie jestem zbyt dobry z matematyki, a chciałbym stworzyć skrypt w JS, który formatowałby liczby jak w PHP funkcja number_format() .

Zrobiłem coś takiego, ale to nie jest zbyt oryginalny skrypt i w dodatku dość rozbudowane… dużo niepotrzebnego kodu tutaj zapewne:

function formatLiczba(liczba, rozdzielnik) {

    liczba = new String(liczba);

    if (liczba.length < 4) {

        return liczba;

    }

     else if (liczba.length < 7) {

        liczbaK = liczba.slice(0, liczba.length-3);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-3, liczba.length);

        return liczbaK;

    }

     else if (liczba.length < 10) {

        liczbaK = liczba.slice(0, liczba.length-6);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-6, liczba.length-3);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-3, liczba.length);

        return liczbaK;

    }

     else if (liczba.length < 13) {

        liczbaK = liczba.slice(0, liczba.length-9);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-9, liczba.length-6);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-6, liczba.length-3);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-3, liczba.length);

        return liczbaK;

    }

     else if (liczba.length < 16) {

         liczbaK = liczba.slice(0, liczba.length-12);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-12, liczba.length-9);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-9, liczba.length-6);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-6, liczba.length-3);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-3, liczba.length);

        return liczbaK;

    }

     else if (liczba.length < 19) {

        liczbaK = liczba.slice(0, liczba.length-15);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-15, liczba.length-12);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-12, liczba.length-9);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-9, liczba.length-6);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-6, liczba.length-3);

        liczbaK += rozdzielnik;

        liczbaK += liczba.slice(liczba.length-3, liczba.length);

        return liczbaK;

    }

     else {

        return liczba;

    }

}

Przykład mojego skryptu: - przykładowy kod korzystający z powyższej funkcji:

document.write(formatLiczba(200000000, "."))
  • wynik zastosowanego powyżej przykładu:

    200.000.000

Tak więc, jak widać… skrypt spełnia z reguły moje oczekiwania, jednak… wiem, że idzie to napisać prościej i wygodniej. Po drugie stworzona przeze mnie funkcja ma ograniczenie do liczb z maksymalnie 18 liczb…

Pomoże ktoś? Z góry dziękuję.

faktycznie musi istnieć prostsza metoda, ja bym kombinował z jakąś pętlą for, niestety chwilowo jestem zajęty, ale zobacz, może coś wymyślisz, jak nie, pokaż do czego doszedłeś i coś ewentualnie się wymyśli wspólnie za kilka godzin

Otóż… ktoś mi już pomógł i stworzył takie coś:

function number_format(l,r){w='';while(a=~~(l/1e3)){w=r+((b=l%1e3)>9?(b>99?'':'0'):'00')+b+w;l=a}return l+w}

Funkcja ta działa poprawnie, jednak tylko na liczbach do 12 zer.

A ja podsunę może bardziej rozbudowane rozwiązanie …ale bez takiego ograniczenia i ze sporą możliwością konfiguracji …np. z dostosowaniem do formatowania waluty :wink:

ja za to skróciłem do “wymaganego minimum”:

co daje efekt:

4 888 888 999 995,457

4.888.888.999.995,457

chyba taki konkretnie efekt chciałeś osiągnąć? :>

PZDR

Tylko że np. dla

daje

:roll:

jak się bawimy w przekraczenie wartości inta to nie dziwne… okej dla zabawy zrobie wersje drugĄ…