La domanda e' BANALE, ma la risposta e' DECISAMENTE complessa
Comuqnue, in soldoni:
ci sono DUE tipi di numeri con la virgola:
1) quelli con un numero di decimali FISSO (in virgola FISSA) usati fondamentalmente per rappresentare soldi (moneta, schei, palanche, grana, pila, dine', dinari, ,..., currency). In questo caso tutti i conti vengono fatti in base 10, e quindi non ci sono problemi di arrotondamento (almeno per quanto riguarda somme e sottrazioni). I problemi nascono con moltiplicazioni e divisioni per numeri NON INTERI (per gli interi, non c'e' nessun problema). In questo caso, gli arrotondamenti vanno fatti secondo le indicazioni d ilegge (non so quali siano, ma so che ci sono)
2) quelli con un numero di decimali VARIABILE (in virgola MOBILE, i classici float e double) usati fondamentalmente nel mondo scientifico CHE DOVREBBERO ESSERE EVITATI COME LA PESTE quando usati per rappresentare soldi. Questo per tutta una serie complicata di motivi uno dei quali e' che il numero NON E' RAPPRESENTATO IN BASE 10 ma in base 2, con tutte le conseguenze del caso, come ad esempio che certi valori dopo la virgola non possono essere rappresentati correttamente.
Ora, dove sta' i problema?
Ci sono diversi problemi:
1) il DB e' in grado di rappresentare numeri in virgola fissa, ma non e' detto che il linguaggio di programmazione che usi sia in grado di farlo. Bisogna controllare ed eventualmente cercare una libreria specializzata per la rappresentazione di questo tipo di numeri
2) il numero di programmatori che capiscono il problema si possono contare sulle dita della mano di un monco
Per quanti riguarda la scelta tra decimale(X,3) o decimal(X,4) ovviamente decimal(X,4) va bene per entrambi i casi.