Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Dynamiczna liczba miejsc po przecinku w printf()
SmokAnalog
post
Post #1





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Cześć Panowie,

czy w PHP da się wypisać liczby zmiennoprzecinkowe w printf bez sztywnego ustawiania liczby miejsc po przecinku?

  1. printf('%f', 1.23456789); // 1.23457
  2. printf('%.10f', 1.23456789); // 1.2345678900


Chcę, żeby 1.1 było wypisane jako 1.1, 1.123 jako 1.123, a 1.123000 też jako 1.123. Da się tak z printf w PHP?

Gdzieś mi się obiła o oczy składnia %.*f, ale nie działa w PHP.
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


%g


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Zrobiłem kilka testów z %g:

  1. printf('%g', 1.23456789); // 1.23457;
  2. printf('%.10g', 1.23456789); // 1.23456789


Ciekawostki:

  1. printf('%.53g', 1.23456789); // 1.2345678899999998900938180668163113296031951904296875
  2. printf('%.54g', 1.23456789); // Notice: printf(): Requested precision of 54 digits was truncated to PHP maximum of 53 digits


Szkoda, że dokładność nie odnosi się tu do liczby miejsc po przecinku, ale ogólnej liczby cyfr:

  1. printf('%.3g', 1.23456789); // 1.23
  2. printf('%.3g', 10.23456789); // 10.2


Jest na to jakiś patent?
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nie rozumiem. A po co precyzja, skoro chciałeś "obcinać" kończące zera?

Chyba, że coś źle rozumiem. Ale jeśli jednak tak jest, to wystarczy "%g". A jeśli nie printf, to $a+0 lub castowanie na float.


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #5





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Spójrz na pierwszy przykład. Precyzja po to, żeby uniknąć domyślnej precyzji wynoszącej 6 (w odniesieniu do łącznej liczby cyfr).
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 Aktualny czas: 21.08.2025 - 03:50