Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dynamiczna liczba miejsc po przecinku w printf()
Forum PHP.pl > Forum > Przedszkole
SmokAnalog
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.
trueblue
%g
SmokAnalog
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?
trueblue
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.
SmokAnalog
Spójrz na pierwszy przykład. Precyzja po to, żeby uniknąć domyślnej precyzji wynoszącej 6 (w odniesieniu do łącznej liczby cyfr).
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.