2017-10-07 4 views
1

Débutant codeur étudiant,Briser un code JavaScript en fonctions

ici et je développe un programme qui peut alerter programme une fois que vous tapez le montant d'argent que vous lui donnez calculera la pointe, et de l'impôt pour obtenir le montant total que l'utilisateur possède. J'ai le code de base vers le bas et le diviser en fonctions, mais quand je mets un nombre, il montre comme non identifié.

Voici mon code:

const TAXRATE=.095 
const TIPRATE=.2 

function foodCharge (foodCharge) { 
    return parseFloat(prompt("please enter the amount")); 
} 
foodCharge(); 

function taxAmount (foodCharge,TAXRATE) { 
    return parseFloat(foodCharge*TAXRATE); 
} 

taxAmount(); 


function subAmount (foodCharge,taxAmount) { 
    return parseFloat(foodCharge+taxAmount); 
} 
subAmount(); 

function tipAmount (TAXRATE,subAmount) { 
    return parseFloat (TAXRATE*subAmount); 
} 
tipAmount(); 


function grandTotal (foodCharge, taxAmount, tipAmount) { 
    return grandTotal=parseFloat(foodCharge+taxAmount+tipAmount) 
} 
grandTotal(); 

function finalCost(foodCharge,taxAmount, tipAmount, grandTotal) { 
    alert ("Meal cost: "+ foodCharge + " \nTax: " + taxAmount + " \nTip: " + 
    tipAmount +" \nGrand total: " + grandTotal); 
} 
finalCost(); 

+0

Toutes vos fonctions attendent de recevoir des arguments, mais quand vous les appelez vous ne passez pas d'arguments. De même, toutes les fonctions sauf la dernière renvoient des valeurs que vous ignorez. Ainsi, lorsque vous appelez la fonction 'finalCost()' à la fin, vous ne lui transmettez aucun argument, donc 'foodCharge',' taxAmount', etc. sont tous indéfinis. Notez que vous avez trop utilisé 'parseFloat()' - le seul endroit dont vous avez besoin est quand la valeur est une chaîne, c'est-à-dire, pour la valeur que l'utilisateur entre. En passant, j'ai formaté le code dans votre question pour le rendre plus lisible (changements d'espaces, pas de changement au code réel). – nnnnnn

+0

s'il vous plaît modifier votre poste sujet à être plus descriptif du problème et souligner ce qui est spécifiquement votre problème plutôt que de simplement dire "je ne peux pas comprendre le problème", je vous invite à lire les lignes directrices – shafeen

+0

@shafeen - Pourquoi modifieriez-vous pour supprimer l'extrait de démonstration? En outre, l'OP a indiqué quel était le problème, c'est-à-dire que les résultats montraient "indéfini" - comme cela était apparent lors de l'exécution de l'extrait que vous avez supprimé. – nnnnnn

Répondre

0

Vous avez besoin fonction parseFloat que lorsque vous analysez nombre flottant de chaîne. Vous n'avez pas besoin d'analyser le résultat d'une opération mathématique régulière (si les deux nombres ne sont pas des chaînes). Lorsque vous passez la fonction en tant que paramètre à alert() vous devez le passer avec des crochets (), sinon vous passez la référence à une fonction.

Si je comprends bien votre question, voici votre programme:

const TAXRATE=0.095 
const TIPRATE=0.2 


function foodCharge (foodCharge) { 
    return parseFloat(prompt("please enter the amount")); 
} 
var charge = foodCharge(); 


function taxAmount (charge, rate) { 
    return charge*rate; 
} 
var tax = taxAmount(charge, TAXRATE); 


function subAmount (charge,tax) { 
    return charge+tax; 
} 
var amount = subAmount (charge,tax); 


function tipAmount (rate,amount) { 
    return rate*amount; 
} 
var tip = tipAmount(TAXRATE,amount); 


function grandTotal() { 
    return charge+tax+tip; 
} 


function finalCost() { 
    alert ("Meal cost: "+ charge + " \nTax: " + tax + " \nTip: " + amount +" \nGrand total: " + grandTotal()); 
} 
finalCost(); 
0

Vous pouvez régler la fonction à appeler au sein finalCost. Remarque, parseFloat() est seulement nécessaire à foodCharge fonction

const TAXRATE = .095 
 
const TIPRATE = .2 
 

 
function foodCharge() { 
 
    return parseFloat(prompt("please enter the amount")); 
 
} 
 

 
function taxAmount(charge, tax) { 
 
    return charge * tax; 
 
} 
 

 
function subAmount(charge, tax) { 
 
    return charge + tax; 
 
} 
 

 
function tipAmount(tip, sub) { 
 
    return tip * sub; 
 
} 
 

 
function grandTotal(charge, tax, tip) { 
 
    return charge + tax + tip; 
 
} 
 

 
function finalCost() { 
 

 
    let _foodCharge = foodCharge(); 
 
    let _taxAmount = taxAmount(_foodCharge, TAXRATE); 
 
    let _subAmount = subAmount(_foodCharge, _taxAmount); 
 
    let _tipAmount = tipAmount(TIPRATE, _subAmount); 
 
    let _grandTotal = grandTotal(_foodCharge, _taxAmount, _tipAmount); 
 

 
    alert("Meal cost: " + _foodCharge + " \nTax: " + _taxAmount + " \nTip: " + 
 
    _tipAmount + " \nGrand total: " + _grandTotal); 
 
} 
 

 
finalCost();

+0

Ok pour essayer et décomposer votre code (pour mieux comprendre cela pour une utilisation future) .... ce que vous avez fait était de créer des fonctions avec tous les noms d'origine intacts ... puis dans la parenthèse ajouter son propre variable ex. charge et taxe etc. puis afin de passer l'argument à la fonction finalCharge vous avez assigné la charge et la taxe à chacune de leur fonction respectée ex.let tax = taxAmount (charge, TAXRATE); et c'est comme ça que vous pouvez passer un argument dans une fonction –

+0

@NathanCenter Oui. Pour éviter les problèmes avec les variables ayant le même identifiant, les variables avec 'finalCost' commencent par et soulignent. – guest271314