2010-09-30 4 views
1

Prenons l'exemple suivant:Python - quelle est la technique de calcul de l'argent accepté?

>>> from decimal import Decimal 
>>> nrml_price = Decimal('0.59') 
>>> discounted = nrml_price/3 # Taking 2/3 off the price with a coupon 
Decimal('0.1966666666666666666666666667') # Customers don't have fractions of a penny 
>>> (nrml_price/3).quantize(D('0.00')) # So I quantize to get 2 decimal places 
Decimal('0.20') # Ca fait combien? Cest vingt cents. 

Le problème est que je suis chargé maintenant techniquement le client pour plus que le prix prévu, mais de moins de 3/10 d'un cent, mais néanmoins il est techniquement incorrect .

Comment puis-je résoudre un problème comme celui-ci? Est-ce que je l'ignore en tant que fait de la vie, ou existe-t-il une façon acceptée de faire ce genre de chose (par exemple, toujours facturer au client le centime le plus proche)?

+11

Regardez Superman III ou Office Space pour avoir une bonne idée de ce que vous devriez faire ici ... –

+7

Ce n'est en fait pas une question de programmation, car il n'y a pas de solution générale que la programmation peut fournir. Vous devez poser cette question à un comptable. – SingleNegationElimination

+0

@San - Espace de bureau - J'allais faire référence à cela :) Je ne me souviens pas de Superman 3 cependant. – orokusaki

Répondre

7

« est-il un moyen accepté de faire ce genre de chose »

Oui. Les comptables le font tout le temps.

En effet COBOL le fait vraiment bien.

Le package Python decimal comporte un ensemble d'options d'arrondi que vous définissez dans le contexte. Presque toujours les options decimal.ROUND_HALF_DOWN ou decimal.ROUND_HALF_EVEN sont ce que vous voulez dans votre contexte. Lors de la construction d'un logiciel de gestion de la vente au détail comme celui-ci, des politiques d'entreprise seront mises en place, gérées par de vrais comptables, qui spécifient ce qui doit être fait.

Demandez au comptable qui travaille pour ce secteur d'activité quelle est la politique.

+0

@orokusaki: Lorsque vous avez exécuté cette expérience exacte, qu'avez-vous appris? –

+0

Je ne l'ai pas fait. C'est pourquoi je vous ai demandé - je vous ai donné 15 points vers votre objectif de 100k :) – orokusaki

+0

@orokusaki: S'il vous plaît prendre l'indice. En fait, exécutez l'expérience réelle. Il s'agit de 4 lignes de code et vous apprendrez plus en exécutant l'expérience qu'en posant des dizaines de questions similaires. Il y a vraiment moins de valeur pour vous si je lance l'expérience et publie les résultats. S'il vous plaît, écrivez l'expérience et exécutez-la. C'est utile pour vous. Vous apprendrez plus de cela que de toute réponse que je pourrais jamais donner. –

4

La réponse ici peut en fait dépendre plus de votre processeur de transaction. Votre processeur de transactions vous permet-il de transférer des montants de devises qui ne sont pas des nombres entiers de centimes? Qu'en est-il des montants en devise de valeur irrationnelle? Dire que la réduction était la racine carrée du prix normal?

La plupart des fournisseurs (c'est vous ici) arrondiront simplement et garderont la différence, en cents entiers.

+0

êtes-vous Russell K. M.? – orokusaki

Questions connexes