Jak poprawnie zaokrąglić ciąg PHP do dwóch miejsc po przecinku?
$number = "520"; // It's a string from a database
$formatted_number = round_to_2dp($number);
echo $formatted_number;
Wynik powinien być 520.00
;
Jaka powinna round_to_2dp()
być definicja funkcji?
php
formatting
numbers
rounding
number-formatting
Rich Bradshaw
źródło
źródło
round
jest funkcją matematyczną, a to tylko problem z formatowaniem.Odpowiedzi:
Możesz użyć number_format () :
Przykład:
Ta funkcja zwraca ciąg znaków .
źródło
round
nie rozwiązuje tutaj problemu OP.round("520", 2)
zwraca520
liczbę zmiennoprzecinkową i echo, które oczywiście nie pokaże go z dokładnością do 2 miejsc po przecinku. Do celów PO - pokazując liczbę całkowitą z 2 miejscami po przecinku, wypełniając ją zerami końcowymi - potrzebujesz funkcji formatowania liczb, a nie funkcji zaokrąglania.520,00
zamiast520.00
, to po prostu działa.Użyj
round()
(użyj, jeśli oczekujesz tylko liczby w formacie zmiennoprzecinkowym, w przeciwnym razie użyj number_format () jako odpowiedzi podanej przez Codemwnci ):Z instrukcji:
...
źródło
round($number, 2);
nie działa. Chcę 520.00, a nie 520. Nie mogę uwierzyć, że round nie robi tego domyślnie.Alternatywnie,
źródło
520,00
? Myślę, że druga odpowiedź działa lepiej w tym przypadku.http://php.net/manual/en/function.round.php
na przykład
źródło
Próbować:
Dane wyjściowe będą:
źródło
Możesz użyć PHP
printf
lubsprintf
funkcji:Przykład z
sprintf
:Możesz uruchomić to samo bez
echo
. Przykład:sprintf("%.3f", $num);
Wynik:
Alternatywnie z
printf
:Wynik:
źródło
Innym bardziej egzotycznym sposobem rozwiązania tego problemu jest użycie
bcadd()
fałszywej wartości dla $ right_operand of0
.źródło
bc*
funkcje nie zaokrąglają w górę, zawsze zaokrąglają w dół. Na przykładbcadd("1.0999","0.0",1)
daje „1,0”, a nie „1,1”.$scale
cyfry ułamkowe. Odpowiada to zaokrągleniu do zera.Użyj funkcji PHP number_format () .
Na przykład,
Dane wyjściowe będą:
źródło
Użyj funkcji PHP number_format () .
źródło
round_to_2dp
jest funkcją zdefiniowaną przez użytkownika i nic nie można zrobić, dopóki nie opublikujesz deklaracji tej funkcji.Myślę jednak, że robi to:
number_format($number, 2);
źródło
round_to_2dp($number);
miał oznaczać pseudokod; OP poprosił, aby ktoś powiedział mu, co zastąpić to wyrażenie.Wyświetlą się dokładnie dwie cyfry po przecinku.
Korzyść:
Jeśli chcesz wyświetlać dwie cyfry tylko po wartości zmiennoprzecinkowej, a nie int, użyj tego.
źródło
Zaokrąglenie poprawnie zaokrągla liczbę, a sprintf zmusza ją do 2 miejsc po przecinku, jeśli zdarzy się, że jest to tylko 1 miejsce po przecinku po zaokrągleniu.
źródło
Zwróci 5,98 bez zaokrąglania liczby.
źródło
floor($retailPrice * 100) / 100;
bez potrzeby formatowania liczb.Do zaokrąglenia warunkowego tj. pokaż dziesiętne tam, gdzie jest to naprawdę potrzebne, w przeciwnym razie liczba całkowita
123,56 => 12,56
123,00 => 123
źródło
Tworzę własne.
źródło
Tutaj dostaję dwa miejsca po przecinku za
.
(kropką) za pomocą funkcji ...Wyniki powyższej funkcji:
Nowa poprawna odpowiedź
Użyj natywnej funkcji PHP bcdiv
źródło
Otrzymasz 2 cyfry po przecinku.
źródło
Jeśli chcesz używać dwóch cyfr dziesiętnych w całym projekcie, możesz zdefiniować:
Następnie następująca funkcja wygeneruje pożądany rezultat:
Ale jeśli nie używasz funkcji bcscale, musisz napisać kod w następujący sposób, aby uzyskać pożądany wynik.
Wiedzieć więcej
Funkcje matematyczne BC
Bcscale
źródło
Liczba bez rundy
źródło
Oto inne rozwiązanie ze strtok i str_pad :
źródło
Dodając do innych odpowiedzi, ponieważ liczba_format () domyślnie doda separator tysięcy.
Aby to usunąć, wykonaj następujące czynności:
źródło
Przykłady
źródło
Możesz użyć funkcji round () PHP .
źródło