这个加班总数没有正确计算的原因是什么
What is the reasoning behind this overtime total not being calculated correctly?
这里有一点解释。停车库收费 5.00 美元,停车最多 3 小时。超过三小时,车库每小时或部分每小时额外收取1.50美元。任何给定的 24 小时期间的最高费用为 18.00 美元。我们假设每次停车时间不超过 24 小时。
有什么理由为什么超过3 小时时总数不会计算?我有一种感觉,它与 sum 变量有关,但我不能把手指放在上面。
<script type="text/javascript">
function multiply() {
var hoursParked = document.getElementById('hP').value;
var price = 5.00;
var totalCost = document.getElementById('total');
var totalPayment = (hoursParked * price);
if (hours < 3) {
sum = price * hours;
return sum;
}
else {
sum = ((hours - 3) * 0.5 * price) + (price * hours);
return sum;
}
totalCost.value= sum; }
</script>
</head>
<body><div align="center">
<form id="1">
<input type="text" id="customerName" name="customerName" placeholder="Please enter your name here." size="27px"><br><br>
<input type="number" id="hP" name="hoursParked" placeholder="Hours parked?" min="1" max="24"><br><br>
<input type="button" id="calculateP" name="calculatePayment" value="Calculate" onclick="multiply()"/>
<input type="reset" id="resetBtn" value="Clear"><br><br>
<input type="number" id="total" name="totalCost" placeholder="Your Total Payment" readonly/><hr>
</form>
</div>
</body>
</html>
function multiply() {
var hoursParked = document.getElementById('hP').value;
var price = 5.00;
var totalCost = document.getElementById('total');
var totalPayment = (hoursParked * price);
if (hoursParked <= 3) {
sum = price * hoursParked;
return sum;
}
else {
sum = ((hoursParked - 3) * (price + 1.50)) + (price * 3);
return sum;
}
totalCost.value= sum; }
此功能将解决您的问题。试试这个
请尝试这个。
function multiply() {
var hoursParked = document.getElementById('hP').value;
var price = 5.00;
var totalCost = document.getElementById('total');
var totalPayment = (hoursParked * price);
var sum="";
if (hoursParked <= 3) {
sum = price * hoursParked;
}
else {
sum = ((hoursParked - 3) * (price + 1.50)) + (price * 3);
}
$('#total').val(sum) ;
}
假设您的意思是前 5.00 小时总计 3 美元(而不是每小时 5.00 美元)
假设您的平均小时数是每小时 1.50 美元(而不是每小时 6.50 美元)
function multiply() {
var hoursParked = document.getElementById('hP').value;
var totalCost = document.getElementById('total');
totalCost.value = getTotalPayment(hoursParked);
}
function getTotalPayment(hoursParked) {
var basePrice = 5.00;
var baseHours = 3;
var maxPayment = 18.00;
var hourlyRate = 1.50;
return Math.min(
basePrice +
(Math.max(Math.ceil(hoursParked - baseHours), 0) * hourlyRate),
maxPayment);
}
我已经分解了getTotalPayment()函数,因此您可以使用一些alert()语句快速尝试它。 以下是一些测试用例:
//should all display 5.00
alert(getTotalPayment(0.00001));
alert(getTotalPayment(1));
alert(getTotalPayment(2));
alert(getTotalPayment(3));
//should display 6.50
alert(getTotalPayment(3.01));
alert(getTotalPayment(3.9));
alert(getTotalPayment(4));
//should display 8
alert(getTotalPayment(5));
//should display 9.50
alert(getTotalPayment(5.01));
alert(getTotalPayment(5.999));
//should display 17
alert(getTotalPayment(11));
//should display 18
alert(getTotalPayment(11.1));
alert(getTotalPayment(12));
alert(getTotalPayment(24));
编辑:阅读OP的澄清评论后
假设前 3 小时
每小时 5.00 美元假设此后的时间每小时 6.50 美元
function getTotalPayment(hoursParked) {
var initialRate = 5.00;
var augmentedRate = 6.50;
var baseHours = 3;
var maxPayment = 18.00;
hoursParked = Math.ceil(hoursParked); //round up any fractional hour
return Math.min(
//cost for any hours up to 3
Math.min(3, hoursParked) * initialRate +
//cost for any hours beyond 3
Math.max(hoursParked - baseHours, 0) * augmentedRate,
maxPayment);
}
以及具有这些新假设的函数的一些测试用例:
//should return 5
alert(getTotalPayment(0.00001));
alert(getTotalPayment(1));
//should return 10
alert(getTotalPayment(1.5));
alert(getTotalPayment(2));
//should return 15
alert(getTotalPayment(3));
//should return 18
alert(getTotalPayment(3.01));
alert(getTotalPayment(4));
alert(getTotalPayment(11.1));
alert(getTotalPayment(24));
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- Knockout的可写计算在AngularJS中可观察的模拟是什么?
- 正确的方法是什么,使用THREE.js方法来计算相机的偏航
- 在 JavaScript 中,在循环中创建函数的具体原因是什么,可能会浪费计算时间
- 句子“每次计算数组初始值设定项时都会计算数组初始值设定项中的元素表达式”是什么意思
- 计算节点.js中内容长度标头的正确方法是什么
- 表达式{headers:headers}的计算结果是什么
- 使用html表单中的输入值进行计算的最佳方式是什么
- 计算数字有效位数的最快方法是什么
- 这个加班总数没有正确计算的原因是什么
- 有人能解释一下下面的代码吗?计算文档中页数的行是什么?