2009-02-02 3 views
1

J'ai essayé d'utiliser une formule qui est utilisée pour calculer la TVA exclusive dans un programme que notre équipe est en train de créer. La formule fonctionne correctement lorsqu'elle est utilisée dans une calculatrice ou en Excel, mais donne une sortie différente lorsqu'elle est utilisée dans une fonction de notre programme!Formule mathématique ne donnant pas la même réponse en C# qu'en excel, ou à la calculatrice

est la fonction ici:

function fn_calcVat() 
{ 
    var vRate = Ext.getCmp('crd_vat_rate').getValue(); 
    var vTranAmt = Ext.getCmp('crd_tran_amt').getValue(); 

    if (vRate != '' && vTranAmt != '') 
    { 
     alert(Ext.getCmp('vatable').getValue().toString()); 
     var vAmt = 0; 
     if (Ext.getCmp('vatable').getValue().toString() == 'Y') 
     { 
      vAmt = (vRate/((vTranAmt/100) + 1)); 
      Ext.getCmp('crd_vat_amt').setValue(vAmt.toFixed(2)); 
      Ext.getCmp('crd_tran_tot').setValue(vTranAmt.toString()); 
      vAmt = 0; 
     } 
     else 
     { 
      vAmt = ((vRate/100) * vTranAmt); 
      Ext.getCmp('crd_vat_amt').setValue(vAmt.toFixed(2)); 
      Ext.getCmp('crd_tran_tot').setValue((vTranAmt + vAmt)); 
      vAmt = 0; 
     }     
    } 
} 

la formule de problème est vAmt = (vRate/((vTranAmt/100) + 1));

L'autre formule fonctionne parfaitement. Un exemple d'entrée serait 100 avec un taux de TVA de 14,00, et la réponse attendue serait un montant de taxe de 14, bien qu'il donne comme 7 !!!

Nous utilisons un mashup de ExtJS, js et C# ...

Toute aide serait grandement apprécié.

Cordialement

Nick

+0

Quelle est la valeur de Ext.getCmp ('Vatable'). GetValue(). ToString()? – recursive

+0

Attendre, n'est pas 14/(100/100 + 1) = 7 correct? –

+0

Il est soit Y ou N en fonction de la TVA incluse ou exclusive ... –

Répondre

3

La formule est incorrecte, il devrait être

vAmt = vTranAmt * (vRate/100.0d); 
+0

Merci un million ... qui l'a résolu! Encore ne sais pas pourquoi cela fonctionne dans Excel! –

+0

De rien, j'ai travaillé avec des logiciels de vente au détail pendant des années, c'est incroyable ce dont vous vous souvenez. . . –

+0

C'est la formule qu'il avait dans son autre cas - qu'est-ce que le cas if essayait de faire? – morechilli

0

Je devine que cela est dû à la différence entre les nombres entiers et nombres à virgule flottante.

Essayez comme ceci:

vAmt = (vRate/((vTranAmt/100.0) + 1.0)); 
3

Deux choses viennent à l'esprit. Tout d'abord, au lieu d'utiliser 'var', utilisez une décimale ou quelque chose de spécifique. La raison en est que le compilateur décidera si vous voulez dire division entière ou division décimale en fonction des types de données des variables. S'il choisit entier, il peut faire un arrondi inattendu en votre nom. La deuxième chose est de s'assurer que les valeurs des variables sont toutes récupérées correctement à partir de ces appels .getCmp().

7

Vous allez probablement tomber en proie à integer division avec le code suivant:

vAmt = (vRate/((vTranAmt/100) + 1)); 

Vous devez changer la formule à ce qui suit pour éviter toute confusion:

vAmt = (vRate/((vTranAmt/100.0) + 1.0)); 

Cependant, en utilisant les numéros vous avez fourni, brancher 100 pour vTranAmt et 14 pour vRate n'aura pas de problème avec la division entière, mais vous donnera 7:

vAmt = (14/((100/100) + 1)) 
    = (14/((1  ) + 1)) 
    = (14/(2    )) 
    = (7     ) 

Donc soit votre formule est incorrecte, ou 7 est la bonne réponse.

1

Juste pour expliquer:

Formule:

vAmt = (vRate/((vTranAmt/100) + 1)); 

Paramètres:

vRate = 14 
vTranAmt = 100 

Suppléant:

vAmt = (14/((100/100) + 1)); 

Calcul:

vAmt = (14/(1 + 1)); 

Calcul:

vAmt = (14/(2)); 

Calcul:

vAmt = (14/2); 

Calcul:

vAmt = (7); 

Alors 7 est la réponse attendue.

Mais vous pouvez réécrire

vAmt = 100 * vRate/(vTranAmt + 100); 
0

Etes-vous sûr la formule est la même dans Excel et il y travaille? Je ne sais pas exactement ce que vous essayez de faire, mais vous divisez par vTranAmt, donc plus cette valeur est grande, plus le résultat est petit. Cela ne semble pas juste, si le résultat est censé être une certaine quantité d'impôt ...

Edit: Très probablement, vous avez les variables vRate et vTranAmt commutées.

+0

Ouais ça fonctionne dans Excel ... –

Questions connexes