Finns det egentligen någon poäng (praktiskt skäl) med att använda datatypen money istället för decimal om vi bortser från att man sparar lite utrymme? Money är gjord för att hantera just pengar, och den klarar alltid att representera 4 decimaler exakt. Detta passar bra för de flesta valutaberäkningar.Poäng med money
Sv: Poäng med money
Men i t ex vetenskapliga beräkningar och för den delen även i vissa extrema fall när det gäller pengar så behöver man en exakt representation av beloppet med fler än 4 decimaler och det är där Decimal och Numeric kommer in. Du kan bestämma hur stort lagringsutrymme de skall ta och hur många decimalers precision de skall ha.
Låt säga att du säljer spik, och de kostar €1 för 10000 st (billig spik, jag vet), då räcker inte Money, eftersom en spik då kostar €0.00001, vilket antagligen kommer att representeras som 0.0000 om du sparar ned det i databasen, dvs kunderna får spiken gratis :-(
Om du i stället använder t ex Float eller Real (flyttal (floating point) till skillnad från fixed point) så kommer du snart att stöta på exempel där du sparar ned 10.0 i posten och när du läser tillbaka det så får du ut 10.000000003 eller något liknande. Oerhört frustrerande i t ex ekonomiska transaktioner där debit och kredit måste matcha exakt på decimalen för att banken (eller ekonomisystemet) skall godkänna transaktionen.
Så är du i behov av exakt representation av tal med fler än 4 decimaler så använder du Decimal/Numeric, 4 eller färre decimaler så funkar Money bra.
Vill du å andra sidan kunna lagra extremt stora (eller små) tal så är floating point-datatyper som Float/Real bättre då dessa kan använda lagringsutrymmet till att lagra stora (eller små) tal på bekostnad av antalet decimaler som kan lagras exakt (i själva verket för riktigt stora tal så kan inga decimaler lagras). Antalet värdesiffror för ett floating point och ett fixed point är nog nästan detsamma om de använder lika många bytes, men övre och undre gränsen är långt i från detsamma.
Hoppas det hjälpte...