lucks
11.09.2006, 07:42:45
da sie zakrąglic liczbe do 2 miejsc po przecinku jakos funkcją z JS?
coś jak round w php...
dr_bonzo
11.09.2006, 07:47:11
lucks
11.09.2006, 08:05:15
no ja własnie o tym, round w js nie działa tak uniwersalnie jak w php, ale moze jest jakas inna funkcja?
Hacker
11.09.2006, 08:13:40
Kod
if (liczba > 0)
liczba = Math.floor(liczba*100)/100
else
liczba = Math.ceil(liczba*100)/100
I
php programmer
11.09.2006, 08:16:34
Możesz zrobić mały trick:
masz liczbe 13.123456
chcesz ją zaokrąglić do dwóch miejsc po przecinku
więc mnożysz ją przez 100 (bo 100 to 10 do potęgi drugiej - wykładnik to liczba zaokrąglenia)
więc 13.123456 * 100 = 1312.3456
i otrzymaną liczbę zaokrąglasz, wychodzi 1312
i teraz spowrotem dzilisz ją przez tą samą liczbę którą pomnozyłes (tuttaj 100)
wychodzi dokłądnie 13.12
revyag
11.09.2006, 08:20:05
@Hacker to co podałeś zaokrągla liczby do najbliższej liczby całkowitej więc o miejscach po przecinku możesz zapomnieć.
@php programmer - to co napisałeś jest w linku podanym przez dr bonzo
Hacker
11.09.2006, 08:30:19
@revyag
Darmowa lekcja matematyki dla Ciebie
Mamy liczbę 1379.9999
Przechodzi przez if-a
i Math.floor() zaokrągla do takiej samej bądź niższej liczby całkowitej
czyli 1379.9999*100 = 137999,99
czyli Math.floor robi z tego 137999
137999/100 = 1379,99
Czyli 2 miejsca po przecinku a teraz
Mamy liczbę -1379.9999
Nie przechodzi przez if-a
i Math.ceil() zaokrągla do takiej samej bądź wyższej liczby całkowitej
czyli -1379.9999*100 = -137999,99
czyli Math.ceil robi z tego -137999
-137999/100 = -1379,99
revyag
11.09.2006, 08:38:16
@Hacker, szybko przeczytałem Twojego posta i nie zauważyłem że wynik zaokrąglenia dzielisz
Hacker
11.09.2006, 08:49:25
Ok, i sorry za drobny wrzut...
dr_bonzo
11.09.2006, 11:44:38
@Hacker: spojrz na to:
<?php
function round_Hackera( $liczba )
{
if ( $liczba > 0 )
{
return floor( $liczba * 100
.0
) / 100.0; }
else
{
return ceil( $liczba * 100
.0
) / 100.0; }
}
function wrapper_for_round_with_precision_2( $liczba )
{
return round( $liczba, 2
); }
$funkcyjki_do_przetestowania = array( 'round_Hackera', 'wrapper_for_round_with_precision_2' );
$liczby = array( 13999
.9999
, -13999
.9999
);
foreach ( $liczby as $liczba )
{
foreach ( $funkcyjki_do_przetestowania as $funkcyjka )
{
printf( "Input: %f; funkcja: %s Output: %f<br />", $liczba, $funkcyjka, $funkcyjka( $liczba ) ); }
}
?>
wynik
Kod
Input: 13999.999900; funkcja: round_Hackera Output: 13999.990000
Input: 13999.999900; funkcja: wrapper_for_round_with_precision_2 Output: 14000.000000
Input: -13999.999900; funkcja: round_Hackera Output: -13999.990000
Input: -13999.999900; funkcja: wrapper_for_round_with_precision_2 Output: -14000.000000
php programmer
11.09.2006, 12:02:54
dr_bonzo: w twoim kodzie
zamiast
<?php
printf( "Input: %f; funkcja: %s Output: %f<br />", $liczba, $funkcyjka, $funkcyjka( $liczba ) ); ?>
dajesz
<?php
printf( "Input: %f; funkcja: %s Output: %01.2f<br />", $liczba, $funkcyjka, $funkcyjka( $liczba ) ); ?>
i
Zresztą temat dotyczył JavaScript
dr_bonzo
11.09.2006, 12:21:10
Kolega chcial odpowiednik funkcji z php, pokazalem tylko ze funkcja Hackera nie dizala identycznie.
Poza tym twoje rozwiazanie daje taki sam wynik:
Input: 13999.999900; funkcja: wrapper_for_round_with_precision_2 Output: 14000.00
php programmer
11.09.2006, 12:24:29
Myślałem, że chodzi o te zera na końcu
Hacker
11.09.2006, 17:43:38
Sorry, myślałem, że chodzi o number_format
Mój błąd, ale jeżeli chodzi o round to
Math.round(liczba*100)/100
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.