mnożenie przez liczbę ujemną

0

Mam taki dziwny problem. W tabeli mysql istnieje kolumna nazwijmy ją C, której typ określiłem jako INT (bo znajdują się w niej same liczby, choc nie zawsze całkowite) Przy pobieraniu danych na stronę wykonywane jest proste obliczenie:
pobierz daną z kolumny A np. liczba 6 następnie podziel przez daną z kolumny B np. liczba 2 i pomnóż przez daną z kolumny C np. liczba -4, czyli zwyczajnie

    $xx=round (($yy/$zz)*$ww,3);

Wszystko liczy poprawnie dopóki, w kolumnie C nie pojawi się liczba ujemna! Wtedy traktuje ją jak zwykłą liczbę dodatnią. Zmieniłem już po kolej całe kodowanie kolumny z INT na Varchar, Float, Decimal etc. bez efektu. Jak to ugryźć?

0

Najpierw potwierdź typy przypisywane każdej zmiennej (na poziomie PHPa). Możesz wykorzystać do tego funkcji var_dump(...); http://php.net/manual/pl/function.var-dump.php
lub trybu debug z IDE.

0

Nie bardzo rozumiem, co by mogło mi to dać poza wyświetleniem typu w jaki sposób opisana jest zmienna. Tę informację mam w tabeli, bo sam ten typ określiłem (aktualnie FLOAT). Chyba, że nie o to chodzi?

0

Może jakieś specyficzne dane? Generalnie działanie daje dobre wyniki: http://ideone.com/gtpoTB

0

A czy w bazie nie masz przypadkiem kolumny jako unsigned?

0
hudson napisał(a):

Nie bardzo rozumiem, co by mogło mi to dać poza wyświetleniem typu w jaki sposób opisana jest zmienna. Tę informację mam w tabeli, bo sam ten typ określiłem (aktualnie FLOAT). Chyba, że nie o to chodzi?

Wiele może się zdarzyć zanim dane (i typy danych) przewędrują do tej funkcji. W ten sposób zweryfikujesz że na wejściu są tam liczby które oczekujesz i że są one reprezentowane jako liczby przez PHP. Potem można działać dalej.

0

Btw nie wiem co miałeś na myśli pisząc

typ określiłem jako INT (bo znajdują się w niej same liczby, choc nie zawsze całkowite)

Int z tego co wiem przechowuje tylko/zawsze całkowite.

0
axelbest napisał(a):

Btw nie wiem co miałeś na myśli pisząc

typ określiłem jako INT (bo znajdują się w niej same liczby, choc nie zawsze całkowite)

Int z tego co wiem przechowuje tylko/zawsze całkowite.

Masz rację! Przecież liczby ujemne to tez liczby całkowite. A zatem niepotrzebnie kombinowałem z ustawianiem typu kodowania kolumny. Kompletnie bez sensu. Unsignet, też nie jest. Coś jest nie tak z samym zapisem dzielenia i mnożenia. Wszak dzieli poprawnie, tylko podzielony wynik pomnożony przez liczbę ujemną nie działa.
Wykluczyłem złe pobieranie z tabeli, bo na ostro podmieniłem zmienną na konkretną liczbę ujemną. Dalej to samo. To musi być jakiś prosty myk. Tyle, że nie mogę na niego trafić.

0

O rzesz w mo ..! Na wskazujący palec mojego starego nauczyciela od matmy! W tym prostym kodziku nie ma, żadnego błędu, a dane są pobierane prawidłowo! Wszystko gra. Problem był gdzie indziej. Nie zauważyłem. W moim ruskim kalkulatorze, miałem ustawioną funkcję dodawania 22%vat do każdej bieżącej operacji. Że tak powiem "rynce opadajum panie kolego". Temat do zamknięcia i sorki za młyn. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1