2011-01-05 97 views
1

我遇到了一個簡單的JavaScript計算問題。如果訂單價格爲25美元或更低,我的文件應該爲訂單增加1.50美元,如果訂單超過25美元,則訂單增加10%。確切的問題是:在JavaScript中做一個簡單的運輸和處理計算

許多公司通常收取購買的運費和手續費。創建一個網頁,允許用戶在文本框中輸入購買價格,幷包含一個計算運輸和處理的JavaScript函數。爲腳本添加功能,對於任何小於或等於25美元的購買,最小運費和手續費爲1.50美元。對於任何超過25.00美元的訂單,請在運費和處理總價中加10%,但不包括最低運費和手續費1.50美元。計算百分比的公式是價格*百分比/ 100。例如,計算50.00美元購買價格10%的公式爲50 * 10/100,導致運費和手續費爲5.00美元。確定訂單的總成本(採購加運輸和處理)後,將其顯示在警報對話框中。

這是我的代碼:

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 + "."); 

在測試我在提示框中輸入一個數字,而不是計算,如果我進入了一個號碼,它計算的,如果我輸入的字符串。即我輸入19,它給了我191.5或我輸入26,它給了我262.6

+0

使用'parseInt'將提示的輸入轉換爲數字。 http://www.w3schools.com/jsref/jsref_parseint.asp – 2011-01-05 16:12:12

+0

'parseInt()'爲金錢價值? Naaah。 – Dutchie432 2011-01-05 16:15:22

+0

@Dutchie - 無論如何,從技術上講,它更好地處理貨幣價值。即將它存儲爲美分(或便士 - 我是英語),然後在想要顯示時進行分區。 – 2011-01-05 16:20:04

回答

2

使用parseFloat將幫助您:

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 + "."); 

在看到它的工作:http://jsfiddle.net/e8U6W/

而且,這樣做會簡單地-0的鮮爲人知把更多的性能方法:

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

(參見:Is Subtracting Zero some sort of JavaScript performance trick?

一定要評這一點,雖然其不因爲很明顯,對於閱讀你的代碼爲parseFloat

+0

你打敗了我! GJ! – Dutchie432 2011-01-05 16:14:56

+0

謝謝大家!我知道parseFloat()和parseReal(),但不知道如何使用它們....我的代碼現在工作! – Nicole 2011-01-05 16:18:09

+0

不用擔心。你想接受那個(點擊勾號)? – 2011-01-05 16:20:43

0

有點多餘的乘法,但你的問題是被輸入的數字被視爲字符串,而不是數字。你必須將它們轉換爲浮點數:

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 + "."); 

這應該爲你做它。

+0

我很好奇你爲什麼要添加這一行:var num = new Number(price); – Nicole 2011-01-06 20:02:01

+0

主要原因是參數驗證(而不是假設會通過一個浮點數)。另一個原因是確保使用數字變量來計算運費價格。 – 2011-01-06 20:23:54