grzem pisze:To ja może prościej, na przykładzie:
Klient wystawił zlecenie sprzedaży 1 BTC po 1000 PLN.
Zostało zrealizowane w trzech transakcjach:
30000400 sat
30000400 sat
39999200 sat
Jak ten problem rozwiąże decimal?
Co zobaczy klient (jakie trzy transakcje i jaką sumę) na wyciągu?
A gdzie jest problem ?
Jak decydujesz się na decimal to będziesz zapisywał wartości w BTC a nie w sat (nie będzie przeliczania, mnożenia, dzielenia). Z góry trzeba określić jaką precyzję potrzebujesz i jak duże liczby będą zapisywane. Dla BTC chyba wystarczy zwiększyć precyzję o 4 miejsca po przecinku czyli będzie 12 miejsc po przecinku. Dla złotówek też powinna wystarczyć precyzja o 4 miejsca więcej czyli 6 miejsc po przecinku (bankom wystarczają 4 miejsca po przecinku)
Tak samo jest w BIGINT też trzeba z góry określić precyzję (o ile mnożymy).
Przy double i float programiści olewali z jaką dokładnością zapisywana jest liczba, a procesory i tak gdzieś muszą ją zaokrąglić, wiec przy tej metodzie była "niekontrolowana precyzja" w dodatku obarczona pewnymi błędami wynikającymi z konstrukcji procesorów. Więc postanowiono że w finansach zabronione jest używanie tego typu zapisu.
Po prostu trzeba zaplanować i podjąć decyzję z jaką dokładnością będą zapisywane kwoty, na kogo korzyść będą zaokrąglane i ograniczyć mikro transakcję, aby nikt nie robił transakcji po 0,00000001 BTC bo po iluś tam tysiącach transakcjach doliczy się że mu brakuje 0,01 PLN.