2011-01-05 3 views
1

Ich habe Probleme mit einer einfachen JavaScript-Berechnung. Mein Dokument soll $ 1,50 zu einer Bestellung hinzufügen, wenn es $ 25 oder weniger ist, oder 10% der Bestellung hinzufügen, wenn es mehr als $ 25 ist. Das genaue Problem ist:In JavaScript eine einfache Versand- und Bearbeitungsberechnung zu tun

Viele Unternehmen berechnen normalerweise eine Versand- und Bearbeitungsgebühr für Einkäufe. Erstellen Sie eine Webseite, die es einem Benutzer ermöglicht, einen Einkaufspreis in ein Textfeld einzugeben, und eine JavaScript-Funktion enthält, die den Versand und die Handhabung berechnet. Fügen Sie dem Skript Funktionen hinzu, die eine Mindestgebühr für Versand und Bearbeitung von 1,50 US-Dollar für jeden Einkauf, der kleiner oder gleich 25,00 ist, hinzufügen. Für Bestellungen über $ 25,00, fügen Sie 10% zum Gesamtkaufpreis für den Versand und die Handhabung hinzu, aber nicht die Mindestbestellkosten von $ 1,50. Die Formel zur Berechnung eines Prozentsatzes ist der Preis * Prozent/100. Zum Beispiel beträgt die Formel für die Berechnung von 10% eines Einkaufspreises von 50,00 $ 50 * 10/100, was zu einer Versand- und Bearbeitungsgebühr von 5,00 $ führt. Nachdem Sie die Gesamtkosten der Bestellung (Kauf und Versand) ermittelt haben, zeigen Sie sie in einem Warndialog an.

Dies ist mein Code:

var price = window.prompt("What is the purchase price?", 0); 
var shipping = calculateShipping(price); 
var total = price + shipping; 
function calculateShipping(price){ 
if (price <= 25){ 
return 1.5; 
} 
else{ 
return price * 10/100 
} 
} 
window.alert("Your total is $" + total + "."); 

Bei der Prüfung ich eine Zahl in dem Eingabefeld eingeben, und statt der Berechnung, als ob ich eine Nummer eingegeben, als berechnet, wenn ich eine Zeichenfolge eingegeben. dh i eingeben 19 und es gibt mir 191.5 oder gebe ich 26 und es gibt mir 262,6

+0

Verwenden Sie 'parseInt', um die Eingabeaufforderung in eine Zahl zu konvertieren. http://www.w3schools.com/jsref/jsref_parseint.asp –

+0

'parseInt()' für Geldwerte? Naaah. – Dutchie432

+0

@Dutchie - Technisch ist es besser, Geldwerte als Int zu behandeln. I.e. Speichern Sie es als Cent (oder Pence - ich bin Englisch) und dann machen Sie die Division, wenn Sie anzeigen möchten. –

Antwort

2

parseFloat Verwendung wird Ihnen helfen:

var price = parseFloat(window.prompt("What is the purchase price?", 0)) 
var shipping = parseFloat(calculateShipping(price)); 
var total = price +shipping; 
function calculateShipping(price){ 
if (price <= 25){ 
return 1.5; 
} 
else{ 
return price * 10/100 
} 
} 
window.alert("Your total is $" + total + "."); 

es sehen auf Arbeits: http://jsfiddle.net/e8U6W/

Auch ein wenig bekannten setzte performanter Weg, dies zu tun einfach wäre -0:

var price =window.prompt("What is the purchase price?", 0) - 0; 

(Siehe: Is Subtracting Zero some sort of JavaScript performance trick?)

Seien Sie sicher, dass dies kommentieren, obwohl als nicht so offensichtlich zu denen Ihr Code als parseFloat

+0

Sie haben mich dazu geschlagen! gj! – Dutchie432

+0

Danke euch allen! Ich wusste über parseFloat() und parseReal(), war aber nicht sicher, wie man sie benutzt .... Mein Code funktioniert jetzt !! – Nicole

+0

Keine Sorgen. Möchten Sie das dann akzeptieren (klicken Sie auf das Häkchen)? –

0

Ein bisschen redundante Multiplikation, aber Ihr Problem ist, dass die Zahlen, die eingegeben werden, als Strings, nicht als Zahlen behandelt werden. Sie müssen sie Gleitkommazahlen konvertieren:

var price = parseFloat(window.prompt("What is the purchase price?", 0)); 
var shipping = calculateShipping(price); 
var total = price + shipping; 

function calculateShipping(price) 
{ 
    if (price <= 25) 
    { 
    return 1.5; 
    } else { 
    return price/10 
    } 
} 

window.alert("Your total is $" + total + "."); 
0
var price = parseFloat(window.prompt("What is the purchase price?", 0)); 
var shipping = calculateShipping(price); 
var total = price + shipping; 
function calculateShipping(price){ 
    var num = new Number(price); 
    if (num <= 25){ 
    return 1.5; 
    } else{ 
    return num * 10/100 
    } 
} 
window.alert("Your total is $" + total + "."); 

Dieses es für Sie tun sollten.

+0

Ich bin neugierig, warum Sie diese Zeile hinzufügen würden: var num = new Number (price); – Nicole

+0

Der Hauptgrund ist die Argumentvalidierung (nicht davon auszugehen, dass ein Float übergeben wird). Ein alternativer Grund besteht darin sicherzustellen, dass eine numerische Variable für die Kalkulation des Versandpreises verwendet wird. –

Verwandte Themen