Powszechne problemy, które wyszukiwałam i czytałam i nadal utknąłem.Wybierz zmiennoprzecinkowe z MySQL z poprawną precyzją
Mam tabelę z transakcjami, w których cena handlowa jest zadeklarowana jako zmienna. Nie mogę użyć "dziesiętnego", ponieważ różne zapasy mają inną precyzję w ich cenie.
Jeśli spojrzeć na tabelę za pomocą phpMyAdmina, wszystkie liczby wyglądają poprawnie - tak jak zostały wstawione, jak widać na poniższym zrzucie ekranu, cena (p) wynosi 0,709, co jest poprawne.
Kiedy jednak zaznaczyć, że handel z tabeli za pomocą regularnych Zend Framework, otrzymuję cena, która jest 0,70899999141693
Jak mogę zrobić select, która działa tak samo jak MyAdmin wybrać robi? A otrzymasz numer z właściwą precyzją? Jeśli mójAdmin wykonuje to zadanie, może być również dostępny w zend, czy mam rację:?
EDYCJA: Nie mogę użyć ROUND
i nie mogę używać DECIMAL
, ponieważ nie znam prawidłowej precyzji. np. cena Apple ma 2 dziesiętne w precyzji, ale cena VTB Bank ma 6 dziesiętnych w precyzji
EDIT2: Oto więcej przykładów na ten sam wybór w myAdmin i Zend.
Handel 8838397 dokonano w cenie 0,01156. Mam włożeniu go w bazie danych i to, co mam w MyAdmin:
Jeśli wybiorę go z php, otrzymuję to:
Zakładam, MyAdmin jakoś domysłów precyzja i robi to naprawdę dobrze. W jaki sposób???
Dlaczego nie użyć dziesiętnej dokładności (lub skali) wystarczająco wysokiej, aby poradzić sobie w najgorszym przypadku? – Strawberry
Tricky thing .. tak działa MySQL. Im wyższa liczba, tym mniej precyzyjne będą twoje obliczenia przy korzystaniu z typów FLOAT | DECIMAL. Typ pola DECIMAL może być twoim rozwiązaniem, ale już napisałeś, że nie możesz go użyć. – Benz
Czy kolumna p jest zawsze liczbą mniejszą od 0? – Benz