Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] zaokrąglanie liczby
Forum PHP.pl > Forum > Przedszkole
lucks
da sie zakrąglic liczbe do 2 miejsc po przecinku jakos funkcją z JS?
coś jak round w php...
dr_bonzo
http://www.javascriptkit.com/javatutors/round.shtml

chyba sie nie da tak prosto jak w php
lucks
no ja własnie o tym, round w js nie działa tak uniwersalnie jak w php, ale moze jest jakas inna funkcja?
Hacker
Kod
if (liczba > 0)
liczba = Math.floor(liczba*100)/100
else
liczba = Math.ceil(liczba*100)/100

I guitar.gif
php programmer
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
@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
@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
@Hacker, szybko przeczytałem Twojego posta i nie zauważyłem że wynik zaokrąglenia dzielisz snitch.gif
Hacker
Ok, i sorry za drobny wrzut...
aarambo.gif smile.gif
dr_bonzo
@Hacker: spojrz na to:
  1. <?php
  2.  
  3. function round_Hackera( $liczba )
  4. {
  5.  if ( $liczba > 0 )
  6.  {
  7. return floor( $liczba * 100.) / 100.0;
  8.  }
  9.  else
  10.  {
  11. return ceil( $liczba * 100.) / 100.0;
  12.  }
  13. }
  14.  
  15. function wrapper_for_round_with_precision_2( $liczba )
  16. {
  17. return round( $liczba, 2 );
  18. }
  19.  
  20. $funkcyjki_do_przetestowania = array( 'round_Hackera', 'wrapper_for_round_with_precision_2' );
  21.  
  22.  
  23. $liczby = array( 13999.9999, -13999.9999 );
  24.  
  25. foreach ( $liczby as $liczba )
  26. {
  27. foreach ( $funkcyjki_do_przetestowania as $funkcyjka )
  28. {
  29. printf( "Input: %f; funkcja: %s Output: %f<br />", $liczba, $funkcyjka, $funkcyjka( $liczba ) );
  30. }
  31. }
  32.  
  33. ?>


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
dr_bonzo: w twoim kodzie

zamiast
  1. <?php
  2. printf( "Input: %f; funkcja: %s Output: %f<br />", $liczba, $funkcyjka, $funkcyjka( $liczba ) );
  3. ?>


dajesz
  1. <?php
  2. printf( "Input: %f; funkcja: %s Output: %01.2f<br />", $liczba, $funkcyjka, $funkcyjka( $liczba ) );
  3. ?>


i guitar.gif

Zresztą temat dotyczył JavaScript
dr_bonzo
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
Myślałem, że chodzi o te zera na końcu
Hacker
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.