|
SWiSH Forum Forum użytkowników programów SWiSH |
 |
SWiSH Max - Jak formatować liczby? (ilość miejsc po przecinku)
Johanson - Czw 05 Lut, 2009 23:40 Temat postu: 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 - 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 - 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 - Sob 07 Lut, 2009 17:22
no eleganckie, eleganckie brawo.
Johanson - 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ł".
|
|