![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 31.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
witam,
mam mały problem i troszke sobie nie radzę z jego rozwiązaniem, a mianowicie chodzi mi o pewnego typu sytuację, jaka zachodzi w moim skrypcie... powiedzmy, że chcę zapisać do bazy daną cyfrę, a dokładniej kwotę, którą pobieram z pliku test.csv ! no i pobrana kwota to powiedzmy: 1.234.567,89 zł lub 1 234 567,89zł - w zależności jak sobie wyeksportuję plik, ale zmierzam do sedna, ponieważ aby poprawnie i czytelnie było to później odczytane, to chciałbym zapisać to do bazy w taki sposób: 1 234 567,89zł, choć te grosze to już są mało istotne i może być to bez nich... chodzi o to, że potrzebuje później wyciągać te dane, aby dokładnie i czytelnie były widoczne, do tego jeśli takich liczb jest 500, to najmniejszą kwotę i największą itp... no i podmieniam sobie znaki np: Kod $nd2 = trim(str_replace(".", " ", $d2)); lub $nd2 = trim(str_replace(" ", "", $d2)); no i teraz jeśli pole tabeli w sql ma atrybut INT: to zapisuje się tylko pierwsza liczba, do pierwszej spacji, np: 1, chyba że zamienię kropkę lub spację na puste pole i liczba jest zapisana bez żadnego odstępu: 1234567 i w tym przypadku swobodnie znajde min, max i pobiorę żądaną kwotę, ale wyświetla mi się właśnie jako jeden ciąg cyfr, a to nie jest już czytelne i nie łądnie wygląda, jeśli natomiast atrybut pola jest powiedzmy varchar, to mogę zapisać tak jak chcę do bazy: 1 234 567,89 - ale wtedy są przekłamania jeśli chodzi o max i min, no i wartości też są tylko do pierwszej spacji min i max pobieram w ten sposób: Kod $min_turn = mysql_query("SELECT MIN(dane2) AS min_dane2 FROM baza"); $row = mysql_fetch_assoc($min_turn); $min = $row['min_dane2']; $max_turn = mysql_query("SELECT MAX(dane2) AS max_dane2 FROM baza"); $row = mysql_fetch_assoc($max_turn); $max = $row['max_dane2']; proszę o pomoc, bo co prawda mogę zapisać to bez żadnych odstępów do tabeli i potem to wyświetlić, ale w przypadku liczb rzędu kilkanaście milionów złotych, to nie są czytelne te liczby, bo trzeba liczyć trójkami, aby wiedzieć czy jest to milion, czy dziesięc itp... |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Prawidłowe podejście w przypadku gdy chcesz operować tymi liczbami w bazie jako "liczby" jest tylko jedno:
1. W bazie zapis jako INT - czyli 1 234 567,89 Jak tego dokonać? Aby wilk był syta i owca cała należy całą tą liczbę wrzucić do bazy razem z groszami. Najprościej: Dzięki temu z 1 234 567,89 masz 123456789 - czyli liczbę groszy ![]() 2. Działania na bazie - pole proponuje bigint - można na nim działać jak tylko sobie życzysz - pamietaj jednak że liczbę musisz podzielić przez 100 aby mieć złotówki bo jest w groszach ![]() 3. Odczyt z bazy - odczytujemy oczywiście liczbę i możemy na niej działać "matematycznie" w przypadku wyświetlania możemy użyć funkcji:
HTH ![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 31.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Prawidłowe podejście w przypadku gdy chcesz operować tymi liczbami w bazie jako "liczby" jest tylko jedno: 1. W bazie zapis jako INT - czyli 1 234 567,89 Jak tego dokonać? Aby wilk był syta i owca cała należy całą tą liczbę wrzucić do bazy razem z groszami. Najprościej: Dzięki temu z 1 234 567,89 masz 123456789 - czyli liczbę groszy ![]() 2. Działania na bazie - pole proponuje bigint - można na nim działać jak tylko sobie życzysz - pamietaj jednak że liczbę musisz podzielić przez 100 aby mieć złotówki bo jest w groszach ![]() 3. Odczyt z bazy - odczytujemy oczywiście liczbę i możemy na niej działać "matematycznie" w przypadku wyświetlania możemy użyć funkcji:
HTH ![]() dzięki wielkie ![]() o to mi włąśnie chodziło... a dokładnie, jeśli chodzi o zapis do bazy, to trim(str_replace) też mozna spokojnie to zrobić, tworząc tablice, gdzie spacje, kropke lub przecinek eliminuje się, co daje nam ciągłą liczbę, którą potem trzeba podzielić ![]() w przypadku tym co podałęś, należy ewentualnie jeszcze dodać opcje liczb ujemnych, bo taki rzypadek też może wsytąić, a mając: jak jest coś ujemnego, to już będzie błąd, ponieważ wszystkie liczby zostaną zapisane do bazy jako dodatnie... ale jeśli chodzi o odczyt, to faktycznie funkcja number_format szybko robi to co chiałem ![]() dzięki wielkie, pozdro Ten post edytował kosmic 20.12.2011, 13:08:45 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 21:39 |