2010-03-24 3 views
3

Eh bien, je me pose des questions sur l'arrondissement des décimales et leur stockage dans DB.Stratégies d'arrondi décimal dans les applications d'entreprise

Le problème est comme ceci:

Disons que nous avons un client et une facture.

La facture a un prix total de 100.495 $ (en raison d'un certain pourcentage de remise qui n'est pas un nombre entier), mais il est indiqué comme 100.50 $ (arrondi, juste pour imprimer sur facture). Il est stocké dans la base de données avec le prix de 100.495 $, ce qui signifie que lorsque le client fait un dépôt de 100,50 $, il aura 0,005 $ de plus sur le compte. Si elle est arrondie, elle apparaîtra comme $ 0, mais après quelques factures, elle continuera à s'accumuler, ce qui semblerait faux (bien que ce ne soit pas le cas).

Ce qu'il y a de mieux à faire dans ce cas. Stocker la valeur de 100,50 $, ou tout laisser tel quel?

+0

Uh-oh! Radix éditer les guerres! "Virgule!" "Non, période!" "Non, virgule!" "Non, période!" ... – John

+1

Vous préparer pour une attaque de tranchage de salami, hein? http://en.wikipedia.org/wiki/Salami_slicing :-) –

+0

Vous apprenez quelque chose de nouveau tous les jours. : O –

Répondre

5

Vous devez stocker le nombre exactement comme vous voulez qu'il soit reflété sur leur balance.

Est-ce que vous chargez réellement le client au demi-cent? Si vous l'êtes, cela devrait être reflété dans l'entrée DB. Si vous n'êtes pas, alors il ne devrait pas. Mais à moins que je ne publie quotidiennement des intérêts courus (comme Prosper.com par exemple), je m'en tiendrai aux unités de monnaie que les gens peuvent payer (ou retirer) exactement.

+0

Non, nous ne facturons pas ce demi-cent, car la facture dit 100,50 $, et c'est le montant que le client dépose. Le système est utilisé presque exclusivement pour les soldes des clients, il n'y a pas de bilan, de tableau des flux de trésorerie, ou quoi que ce soit d'autre qui soit très comptable. Que proposez-vous alors, pour l'arrondir, et le ranger comme ça? –

+0

Dans ce cas, stocker définitivement la quantité arrondie. Si le client en achète un, chargez (et stockez) 100,50 $ (ou 100,49 $, mais vous voulez arrondir le montant total). S'ils en achètent deux, chargez et conservez 200,99 $. Dans votre cas, le demi-cent n'a pas d'importance après la commande, alors oubliez-le. – John

+0

Quelles que soient vos règles métier, c'est ce que vous devez stocker. Si vous facturez 100,50 $ et le client a payé 100,50 $, stocker 100,495 $ est sans valeur pour toutes les personnes impliquées. Tout comme si le 100.3333333333 ne vous permettait pas de stocker tous les trois, vos règles commerciales vous diraient comment et quand le couper. –

1

Cela dépend de ce qui est le plus important. Mais habituellement, si vous faites un système de comptabilité ou de facturation, la conciliation des soldes est un objectif important. Donc, pour cette raison, je stockerais la valeur arrondie.

1

Je voudrais enregistrer les deux (sérieusement).

1

Stockez les deux. Vos clients ne seront pas en mesure de payer le montant non arrondi par carte de crédit de toute façon, mais vos livres doivent être corrects.

Questions connexes