2011-01-05 99 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