Używamy double
.
*łapanie tchu*
Czemu?
Ponieważ może reprezentować dowolną 15-cyfrową liczbę bez ograniczeń co do miejsca po przecinku . Wszystko za marne 8 bajtów!
Może więc reprezentować:
0.123456789012345
123456789012345.0
... i wszystko pomiędzy.
Jest to przydatne, ponieważ mamy do czynienia z globalnymi walutami idouble
możemy przechowywać różne liczby miejsc dziesiętnych, które prawdopodobnie napotkamy.
Pojedyncze double
pole może reprezentować 999,999,999,999,999 sekund w jenach japońskich, 9999,999,999,999,99 dolarów w dolarach amerykańskich, a nawet 9 999,999.99999999 sekund w bitcoinach
Jeśli spróbujesz zrobić to samo decimal
, potrzebujesz decimal(30, 15)
14 bajtów.
Ostrzeżenia
Oczywiście używanie double
nie jest bez zastrzeżeń.
Jednak nie jest to utrata dokładności, jak niektórzy wskazują. Chociaż double
sam może nie być wewnętrznie dokładny w stosunku do systemu podstawowego 10 , możemy to zrobić, zaokrąglając wartość którą pobieramy z bazy danych do jej znaczących miejsc po przecinku. W razie potrzeby to jest. (np. jeśli ma zostać wydrukowany i wymagana jest podstawowa reprezentacja 10).
Zastrzeżenia są następujące: za każdym razem, gdy wykonujemy z nim arytmetykę, musimy znormalizować wynik (zaokrąglając go do jego znaczących miejsc po przecinku) przed:
- Przeprowadzanie na nim porównań.
- Zapisywanie go z powrotem do bazy danych.
Innym zastrzeżeniem jest to, że w przeciwieństwie do sytuacji, w decimal(m, d)
której baza danych uniemożliwia programom wstawianie liczb zawierających więcej niż m
cyfry, nie ma takiej weryfikacji double
. Program może wstawić wprowadzoną przez użytkownika wartość 20 cyfr, a następnie zostanie po cichu zapisany jako niedokładna kwota.
deimal(10,2)
to jest to, czego używam ... możesz dostosować wartości w zależności od oczekiwanego rozmiaru