javascript 如何使这个计算像我的计算器一样

3b6akqbq  于 2023-06-20  发布在  Java
关注(0)|答案(4)|浏览(158)

我正在运行下面的脚本,得到了与预期不同的结果。我的桌面计算器计算出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>
blmhpbnm

blmhpbnm1#

你对这条线的预期结果

var hours3 = parseInt(hours3_element.value);

值为“86.87”?
结果是:小时3 = 86!
你应该使用parseFloat()!

qnyhuwrf

qnyhuwrf2#

根据您的评论,您希望产生28.84美元而不是29.07美元,为此您可以使用parseFloat而不是pasrseInt

pes8fvy9

pes8fvy93#

我不认为其他现有的答案彻底解释了你的代码的根本问题。以下是为什么它不工作(除了解决方案):
问题是,你的计算机的计算器知道分数是什么,但你的代码不知道。在整个代码中,您使用parseInt,但是,此函数仅适用于整数(整数)。如果你传递一个分数给parseInt,它将 * 截断 * 分数,或者去掉分数部分。因为你要删除数据,你会得到一个不准确的结果。
你想使用的是parseFloatparseFloat的作用与parseInt相同,只是它不截断任何内容。如果你给它传递一个分数,那么它的结果将是分数。这就是我所说的“parseFloat知道分数,但parseInt不知道”。
其他一些评论/答案说parseInt返回一个整数,parseFloat返回一个浮点数,然而,这并不完全正确。与其他编程语言不同,JavaScript中没有不同类型的数字,如intdoublefloat;所有数字都是浮点数(float),parseIntparseFloat都返回浮点数。唯一的区别是它们如何解析输入。parseFloat会考虑小数部分,而parseInt不会。

h4cxqtbf

h4cxqtbf4#

blakkwater在评论中给出了答案:
您正在使用parseInttxt_hours3中提取数字,因此您有86而不是86.67。使用parseFloat正确地获得小数。
结果是:

// 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 = parseFloat(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 = 'Hourly Rate $' + calculateSS.toLocaleString() + '<br>' + 'Daily Rate $' + calculateS1.toLocaleString();
    event.preventDefault();
    console.log;
  } else {
    document.getElementById('resultsS').innerHTML = 'Hourly Rate $' + calculateSS.toLocaleString() + '<br>' + 'Daily 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>

相关问题