Sprawdzając nową strukturę bazy danych zauważyłem, że ktoś zmienił pole z float na double. Zastanawiając się dlaczego, sprawdziłem dokumentację mysql, ale szczerze mówiąc nie rozumiałem, na czym polega różnica.
Obie reprezentują liczby zmiennoprzecinkowe. A FLOAToznacza pojedynczą precyzję, a a DOUBLEpodwójną precyzję.
MySQL wykorzystuje cztery bajty na wartości o pojedynczej precyzji i osiem bajtów na wartości o podwójnej precyzji.
Istnieje duża różnica między liczbami zmiennoprzecinkowymi a liczbami dziesiętnymi (numerycznymi), których można używać z DECIMALtypem danych. Służy do przechowywania dokładnych liczbowych wartości danych, w przeciwieństwie do liczb zmiennoprzecinkowych, gdzie ważne jest zachowanie dokładnej precyzji, na przykład w przypadku danych pieniężnych.
@Kailas Floats są zaokrąglane, a dziesiętne nie. Dziesiętna (9,3) może być na przykład 123456.789, podczas gdy gdybyś próbował zapisać 123456.789, zostałby wstawiony jako 123456.0 jako liczba zmiennoprzecinkowa.
Zauważ, że po pewnym czasie płynie i podwaja się. Na przykład 100000,1 obcina do 100000 jako liczba zmiennoprzecinkowa.
Blake
14
Myśl Chciałbym dodać własnym przykładzie, że pomógł mi zobaczyć różnicę przy użyciu wartości 1.3podczas dodawania lub mnożenia z innym float, decimali double.
FLOAT przechowuje liczby zmiennoprzecinkowe z dokładnością do ośmiu miejsc i ma cztery bajty, podczas gdy DOUBLE przechowuje liczby zmiennoprzecinkowe z dokładnością do 18 miejsc i ma osiem bajtów.
Odpowiedzi:
Obie reprezentują liczby zmiennoprzecinkowe. A
FLOAT
oznacza pojedynczą precyzję, a aDOUBLE
podwójną precyzję.MySQL wykorzystuje cztery bajty na wartości o pojedynczej precyzji i osiem bajtów na wartości o podwójnej precyzji.
Istnieje duża różnica między liczbami zmiennoprzecinkowymi a liczbami dziesiętnymi (numerycznymi), których można używać z
DECIMAL
typem danych. Służy do przechowywania dokładnych liczbowych wartości danych, w przeciwieństwie do liczb zmiennoprzecinkowych, gdzie ważne jest zachowanie dokładnej precyzji, na przykład w przypadku danych pieniężnych.źródło
Być może ten przykład mógłby wyjaśnić.
Mamy taki stół:
Dla pierwszej różnicy próbujemy wstawić rekord z wartością „1,2” w każdym polu:
Tabela pokazująca w ten sposób:
Zobacz różnicę?
Próbujemy przejść do następnego przykładu:
Hola! Różnicę możemy znaleźć w ten sposób:
źródło
float(10, 2)
Podwójne są jak pływaki, z wyjątkiem tego, że są dwa razy większe. Pozwala to na większą dokładność.
źródło
Myśl Chciałbym dodać własnym przykładzie, że pomógł mi zobaczyć różnicę przy użyciu wartości
1.3
podczas dodawania lub mnożenia z innymfloat
,decimal
idouble
.1.3
float DODANO do1.3
różnych typów:1.3
float MULTIPLIED przez1.3
różne typy:Używa MySQL 6.7
Pytanie:
Utwórz tabelę i wstaw dane:
źródło
FLOAT przechowuje liczby zmiennoprzecinkowe z dokładnością do ośmiu miejsc i ma cztery bajty, podczas gdy DOUBLE przechowuje liczby zmiennoprzecinkowe z dokładnością do 18 miejsc i ma osiem bajtów.
źródło
Float ma 32 bity (4 bajty) z dokładnością do 8 miejsc. Double ma 64 bity (8 bajtów) z dokładnością do 16 miejsc.
Jeśli potrzebujesz większej dokładności, użyj Double zamiast Float .
źródło