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 doublepole 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 doublenie jest bez zastrzeżeń.
Jednak nie jest to utrata dokładności, jak niektórzy wskazują. Chociaż doublesam 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ż mcyfry, 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