Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kiedy dodaję xx do mysql float column, jest to zły wynik, czy to błąd?

Twój problem ma coś wspólnego z tym, jak duża jest twoja wartość zmiennoprzecinkowa, ale nie jestem w 100% pewien, dlaczego. Przetestowałem aktualizację podobnego wiersza mniejszymi numerami i działało dobrze. Powinieneś również powstrzymać się od używania cudzysłowów tam, gdzie to możliwe, ponieważ wymaga to dodatkowego przetwarzania. Zobacz to pytanie SO:zaktualizuj kolumnę, odejmując wartość

Oto moje proste obejście, tak jak sugerował Tim Biegeleisen:

CREATE TABLE `xxx` (
  `uid` int(11) NOT NULL,
  `money` decimal(10,2) NOT NULL DEFAULT '0.00' ,
  `real_money` float(10,2) NOT NULL ,
  `available_invoice` float(10,2) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

Wstaw:

USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);

Aktualizacja bez ciągów:

update xxx set money = money - 20 where uid = 1234;

Przy obliczaniu dużych wartości zmiennoprzecinkowych są pewne dziwne rzeczy. Niektóre z tych problemów są zależne od komputera i związane z typem posiadanego procesora. Przeczytaj więcej tutaj:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html

Ponadto, zgodnie z innym pytaniem SO, wartości zmiennoprzecinkowe NIE są dobrym sposobem na przechowywanie wartości pieniężnych. Różnica między typem danych zmiennoprzecinkowych i dziesiętnych (patrz druga odpowiedź).

Wygląda na to, że użycie decimal i numeric typy danych są najlepsze dla kolumn pieniędzy w mysql.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę sformatować MySQL TIMEDIFF bez sekund?

  2. Instalacja MySQL for Visual Studio nie powiodła się, kod błędu 1603

  3. Wykonanie zapytania w PHP trwa 90 razy dłużej niż w przypadku klienta MySQL

  4. Błąd MySQL — masz błąd w składni SQL

  5. json_encode zwraca wartości kolejnych wierszy - PHP PDO SQL HighCharts