Próbuję znaleźć szybki sposób usunięcia zero decimals
z wartości liczbowych, takich jak ten:
echo cleanNumber('125.00');
// 125
echo cleanNumber('966.70');
// 966.7
echo cleanNumber(844.011);
// 844.011
Czy istnieje jakiś zoptymalizowany sposób, aby to zrobić?
Odpowiedzi:
$num + 0
Zrób sztuczkę.Wewnętrznie jest to równoznaczne z rzucaniem na float z
(float)$num
lub,floatval($num)
ale wydaje mi się to prostsze.źródło
floatval()
robi to.floatval
zwraca wartość zmiennoprzecinkową. Twierdziłbym, że używanie go jako programu formatującego ułamki dziesiętne też nie jest zbyt oczywiste ani czyste.//COMMENT
możesz po prostu użyć
floatval
funkcjiźródło
Oto czego używam:
NB Zakłada
.
się, że jest to separator dziesiętny. Ma tę zaletę, że będzie działać na dowolnie dużych (lub małych) liczbach, ponieważ nie ma rzutowania typu float. Nie zmieni też liczb w notację naukową (np. 1.0E-17).źródło
Zwykłe dodanie
+
do zmiennej ciągu spowoduje rzutowanie na (float) i usunięcie zer:źródło
Dla wszystkich odwiedzających tę stronę, którzy mają ten sam problem z komunikatami, zmień:
do:
Jeśli są dwa zera do usunięcia, zmień na:
Więcej tutaj: numer PHP: przecinek dziesiętny widoczny tylko w razie potrzeby
źródło
Jeśli chcesz usunąć cyfry zerowe tuż przed wyświetleniem na stronie lub w szablonie.
Można użyć sprintf () funkcji
źródło
Powinieneś rzucić swoje liczby jako pływaki, co zrobi to za Ciebie.
Wynik tego będzie tym, czego szukasz.
źródło
(float)'0.1234567890124567890123456789'
staje się0.12345678901246
.Nie ma nic, czego nie można naprawić prostym wyrażeniem regularnym;)
http://xkcd.com/208/
źródło
0
takie jak in"100"
. Nie0
zdejmuje się również"100.010"
.$x = preg_replace("/(\.0*$)|((?<=\.\d*)0+$)/",'',$x);
Typecast do pliku
float
.źródło
Z powodu tego pytania jest stary. Po pierwsze, przepraszam za to.
Pytanie dotyczy liczby xxx.xx, ale w przypadku, gdy jest to x, xxx.xxxxx lub różnicowy separator dziesiętny, taki jak xxxx, xxxx, może być trudniej znaleźć i usunąć cyfry zerowe z wartości dziesiętnej.
A oto kod do testu.
źródło
Uważaj, dodając +0.
Wynik tego to 1.
źródło
Dziwne, kiedy dostaję z bazy danych numer typu „float” i jeśli mój numer to np. 10000 kiedy go floatval, staje się 1.
Przetestowałem wszystkie powyższe rozwiązania, ale nie zadziałały.
źródło
źródło
Skomplikowany sposób, ale działa:
powyższe rozwiązania są optymalnym sposobem, ale jeśli chcesz mieć własne, możesz to wykorzystać. Co robi ten algorytm, zaczyna się na końcu łańcucha i sprawdza, czy jego 0 , jeśli tak, ustawia pusty ciąg, a następnie przechodzi do następnego znaku od tyłu, aż ostatni znak jest > 0
źródło
Możesz użyć:
źródło
To moje małe rozwiązanie ... Można dołączyć do klasy i ustawić zmienne
private $ dsepparator = '.'; // ułamki dziesiętne prywatne $ tsepparator = ','; // tysiąc
Można to ustawić przez konstruktora i zmienić język użytkownika.
źródło
To jest moje rozwiązanie. Chcę zachować możliwość dodawania separatora tysięcy
źródło
To jest prosta funkcja jednowierszowa wykorzystująca rtrim, separator zapisu i przecinek dziesiętny:
źródło
Uważam, że to rozwiązanie jest najlepsze:
źródło
Proste i dokładne!
źródło
Ostateczne rozwiązanie: jedynym bezpiecznym sposobem jest użycie wyrażenia regularnego:
będzie działać w każdym przypadku
źródło
Poniższe jest znacznie prostsze
źródło
źródło
Ten kod usunie zero po przecinku i zwróci tylko dwie cyfry dziesiętne.
liczba $ = 1200,0000;
str_replace ('. 00', '', number_format ($ numer, 2, '.', ''));
Wynik będzie: 1200
źródło