 |
SWiSH Forum
Forum użytkowników programów SWiSH
|
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ł".
|
|
|
|
 |
|
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
|
|
|
|
|
|
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.11 sekundy. Zapytań do SQL: 9 |
|
|