我正在运行下面的脚本,得到了与预期不同的结果。我的桌面计算器计算出28.84美元,但代码显示为29.07美元。我不确定是不是我的代码有问题。
// Compute Semi-monthly
function calcSalaryS() {
var sppp3_element = document.getElementById('txt_sppp3');
var sppp3 = parseInt(sppp3_element.value);
var hours3_element = document.getElementById('txt_hours3');
var hours3 = parseInt(hours3_element.value);
var wwpy3_element = document.getElementById('txt_wwpy3');
var wwpy3 = parseInt(wwpy3_element.value);
var calculateS = sppp3 / wwpy3;
var calculateSS = calculateS / hours3;
var calculateS1 = sppp3 / 260;
if (hours3 == 86.67) {
document.getElementById('resultsS').innerHTML = 'Daily Rate $' + calculateSS.toLocaleString() + '<br>' + 'Hourly Rate $' + calculateS1.toLocaleString();
event.preventDefault();
console.log;
} else {
document.getElementById('resultsS').innerHTML = 'Daily Rate $' + calculateSS.toLocaleString() + '<br>' + 'Hourly Rate $' + calculateS1.toLocaleString();
event.preventDefault();
console.log;
}
}
<p>Yearly Salary:<input type="text" name="sppp3" id="txt_sppp3" value="60000" size="12" title="Whole numbers only,e.g. '20000'" /></p>
<p>Hours Per Week:<input type="text" name="hours3" id="txt_hours3" value="86.67" size="10" disabled /></p>
<p>Work Week per Year:<input type="text" name="wwpy3" id="txt_wwpy3" value="24" size="7" disabled /></p>
<button value="calculate" onclick="calcSalaryS()" class="block">Compute Daily and Hourly Rate</button></p>
<p id="resultsS"></p>
4条答案
按热度按时间blmhpbnm1#
你对这条线的预期结果
值为“86.87”?
结果是:小时3 = 86!
你应该使用parseFloat()!
qnyhuwrf2#
根据您的评论,您希望产生28.84美元而不是29.07美元,为此您可以使用
parseFloat
而不是pasrseInt
pes8fvy93#
我不认为其他现有的答案彻底解释了你的代码的根本问题。以下是为什么它不工作(除了解决方案):
问题是,你的计算机的计算器知道分数是什么,但你的代码不知道。在整个代码中,您使用
parseInt
,但是,此函数仅适用于整数(整数)。如果你传递一个分数给parseInt
,它将 * 截断 * 分数,或者去掉分数部分。因为你要删除数据,你会得到一个不准确的结果。你想使用的是
parseFloat
。parseFloat
的作用与parseInt
相同,只是它不截断任何内容。如果你给它传递一个分数,那么它的结果将是分数。这就是我所说的“parseFloat
知道分数,但parseInt
不知道”。其他一些评论/答案说
parseInt
返回一个整数,parseFloat
返回一个浮点数,然而,这并不完全正确。与其他编程语言不同,JavaScript中没有不同类型的数字,如int
、double
或float
;所有数字都是浮点数(float
),parseInt
和parseFloat
都返回浮点数。唯一的区别是它们如何解析输入。parseFloat
会考虑小数部分,而parseInt
不会。h4cxqtbf4#
blakkwater在评论中给出了答案:
您正在使用
parseInt
从txt_hours3
中提取数字,因此您有86
而不是86.67
。使用parseFloat
正确地获得小数。结果是: