SWiSH Forum Strona Główna SWiSH Forum
Forum użytkowników programów SWiSH

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
Jak formatować liczby? (ilość miejsc po przecinku)
Autor Wiadomość
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Czw 05 Lut, 2009 23:40   Jak formatować liczby? (ilość miejsc po przecinku)

Czy istnieje funkcja formatująca liczby, tzn. określająca ilość miejsc po przecinku, podział na grupy trzycyfrowe, .. ?
 
     
eden
Ekspert


Pomógł: 35 razy
Dołączył: 04 Sty 2008
Posty: 265
Skąd: warsaw
Wysłany: Pią 06 Lut, 2009 01:25   

nieistnieje taka funkcja.

jesli z liczby zmiennoprzecinkowej chcesz zrobic całkowita to korzystasz z int(liczba) lub tez z klas math - Math.floor(liczba) , Math.round(liczba) , Math.ceil(liczba)

jesli chcesz z liczby zmiennoprzecinkowej sam ustalic ilosc miejsc dziesietnych to wykonujesz proste działanie

input: 5,475869 output: 5,47
Kod:
 temp = int(5,475869 * 100) / 100;
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Pią 06 Lut, 2009 16:33   

Dzięki

Szkoda, że Swish nie przewiduje takiej funkcji.
A obejście idzie w dobrym kierunku - dzięki.

Tylko (oprócz 'literówki': Swish arytmetycznie akceptuje kropkę, nie przecinek),
że opisane działanie nie sprawdza się, gdy na końcu będzie 'zero',
np. input: 5,4075869 output: 5,4

Trzeba będzie napisać coś własnego.

Jeszcze raz dziękuję za naprowadzenie.

[ Dodano: Pią 06 Lut, 2009 21:03 ]
Napisałem na prędce, może się komuś przyda

function NumTrans(Liczba,md)
{Liczba=Number(Liczba);
md=Number(md);
var Wynik=int(Liczba);
if (md>0)
{Wynik=Math.round(Liczba*Math.pow(10,md))*Math.pow(10,-md);
for (i=1; i<=md; i++)
Wynik+='0';
Wynik=Wynik.substr(0,length(int(Liczba).toString())+md+1);}
return Wynik;
}


Działa również dla liczb ujemnych; można w niej jeszcze wiele usprawnić,
ale do moich potrzeb wystarczy.

Pozdrawiam Swish'owiczów

[ Dodano: Pią 06 Lut, 2009 21:40 ]
Jeszcze drobna korekta dla liczby ZERO (ooops)
Teraz zero też będzie z miejscami po przecinku,
np. NumTrans(0,3) => '0.000'


function NumTrans(Liczba,md)
{Liczba=Number(Liczba);
md=Number(md);
var Wynik=int(Liczba);
if (md>0)
{if (Wynik==0)
Wynik='0.';
else
Wynik=Math.round(Liczba*Math.pow(10,md))*Math.pow(10,-md);
for (i=1; i<=md; i++)
Wynik+='0';
Wynik=Wynik.substr(0,length(int(Liczba).toString())+md+1);}
return Wynik;
}
 
     
eden
Ekspert


Pomógł: 35 razy
Dołączył: 04 Sty 2008
Posty: 265
Skąd: warsaw
Wysłany: Sob 07 Lut, 2009 17:22   

no eleganckie, eleganckie brawo.
 
     
Johanson 
Przyjaciel


Dołączył: 05 Lut 2009
Posty: 56
Skąd: Grudziądz
Wysłany: Nie 08 Lut, 2009 13:28   

To miłe, tylko, że poełniłem gafę
- wstawiłem wersję 'przedostatnią', w której (do celów testowych)
było włączone zaokrąglanie liczb całkowitych.
Dopiero teraz zauważyłem ...
Ostatecznie powinno być, jak niżej:


function NumTrans(Liczba,md)
{Liczba=Number(Liczba);
md=Number(md);
var Wynik=int(Liczba);
if (md>0)
{if (Wynik==Liczba)
Wynik+='.';
else
Wynik=Math.round(Liczba*Math.pow(10,md))*Math.pow(10,-md);
for (i=1; i<=md; i++)
Wynik+='0';
Wynik=Wynik.substr(0,length(int(Liczba).toString())+md+1);}
return Wynik;
}


Jeszcze raz dziękuję Edenowi, że mnie "ukierunkował".
:-)
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
         
Strona wygenerowana w 0.1 sekundy. Zapytań do SQL: 10