Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem ze str_replace
Forum PHP.pl > Forum > Przedszkole
Laran
Witam.

Prosto z mostu: chciałbym pozbyć się z liczb niepotrzebnych zer po kropce (np: 1.000 na 1, 1.100 na 1.1 itd.). Mam jednak problem z funkcją str_replace.

Oto co napisałem (maksymalnie mogą być trzy liczby po przecinku):

  1. $result = str_replace('.000','',$result); // działa
  2. $result = str_replace('00$','',$result); // nie działa (tzn. nie usuwa 00 jeśli znajdują się na końcu ciągu ($)
  3. $result = str_replace('0$','',$result); // nie działa (tzn. nie usuwa 0 jeśli znajdują się na końcu ciągu ($)


Co w tym jest źle napisane?
mstraczkowski
Być może pomoże ci funkcja floatval lub ręczne rzutowanie na float w taki sposób:
(Zaokrągla do dwóch miejsc - usunie zbędne zera)

  1. $liczba = 1.1330000000;
  2. var_dump( (float) $liczba );

Tylko że to zaokrągli twoją liczbę do 2 miejsc po przecinku, satysfakcjonuje cię to ?

Jeżeli zależy ci na konieczne 3 miejscach to spróbuj użyć number_format
(Zaokrągla do trzech miejsc - usunie zbędne zera)

  1. $liczba = 1.1330000000;
  2. var_dump(number_format($liczba, 3));

Lub także funkcja round
(Zaokrągla do trzech miejsc - usunie zbędne zera)

  1. $liczba = 1.1330000000;
  2. var_dump(round($liczba, 3));

Można także użyć funkcji znalezionej w dokumentacji PHP, usunie ona zbędne zera (bez zaokrąglania)
Ale nie zapanujesz za jej pomocą nad tym ile miejsc po przecinku zostanie

  1. function zeroClean($float)
  2. {
  3. $float=explode('.',$float,2);
  4. if(!isset($float[1])) $float[1]=0;
  5. for($i=(strlen($float[1])-1);$i>0;$i--) {
  6. if($float[1]{$i}=='0')
  7. $float[1]=substr($float[1],0,-1);
  8. else break;
  9. }
  10. return(sprintf('%s%s',$float[0],($float[1]!='0')?".{$float[1]}":''));
  11. }
  12.  
  13. $liczba = 1.1330000000;
  14. var_dump(zeroClean($liczba));
jasin
str_replace jako parametr przyjmuje string. Powinieneś użyć preg_replace - tu przyjmuje pattern.
Laran
Zrobiłem tak i działa:

  1. $number = 123.40506070809000000000;
  2. echo "Wynik: ".(float)$number;

Wynik: 123.40506070809

http://stackoverflow.com/questions/5149129...ng-zeros-in-php
http://codepad.org/TVb2Xyy3
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.