Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem ze str_replace
Laran
post 19.05.2013, 12:09:00
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 20.03.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
mstraczkowski
post 19.05.2013, 12:12:21
Post #2





Grupa: Zarejestrowani
Postów: 273
Pomógł: 52
Dołączył: 3.02.2013
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


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));


Ten post edytował mstraczkowski 19.05.2013, 12:25:53


--------------------
Jeżeli moja wypowiedź Ci pomogła użyj przycisku
Go to the top of the page
+Quote Post
jasin
post 19.05.2013, 12:15:11
Post #3





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

Ostrzeżenie: (0%)
-----


str_replace jako parametr przyjmuje string. Powinieneś użyć preg_replace - tu przyjmuje pattern.


--------------------
Go to the top of the page
+Quote Post
Laran
post 19.05.2013, 12:45:52
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 20.03.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.05.2024 - 12:00