【问题标题】:rounding answers to decimal places [duplicate]将答案四舍五入到小数位[重复]
【发布时间】:2017-07-23 16:14:01
【问题描述】:
<script language="JavaScript">
<!--
function calculate() {
var x= document.Form.x.value
var y = document.Form.y.value
if(x> 0 && y> 0){   
var final = x/(y/100*y/100)
document.Form.answer.value = final
if(final < a){
document.Form.meaning.value = "A"
}
if(final > a && final < b){
document.Form.meaning.value = "B"
}
if(final > b && final < c){
document.Form.meaning.value = "C"
}
if(final > d){
document.Form.meaning.value = "D"
}
}
else{
alert("Please Fill form in correctly")
}
}
//-->
</script>

<div class=form2>
<form name="Form">
x: <input type="text" name="x" size="10"><br />
y: <input type="text" name="y" size="10"><br />
<input type="button" value="Calculate" onClick="calculate()"><br />
Answer: <input type="text" name="answer" size="10"><br />
This Means: <input type="text" name="meaning" size="25"><br />
<input type="reset" value="Reset" />
</form>
</div>

我正在使用上面的方法根据人们输入的 X 和 Y 进行计算...

我得到了想要的答案,但是给出了一长串小数位。

我正在寻找一种方法,将每个答案最多四舍五入到小数点后 2 位。

任何帮助将不胜感激:-)

【问题讨论】:

  • 为什么这个标签是php?
  • 在将代码放入calculator.php 脚本时,我在PHP 中标记了这个问题
  • 标签用于显示问题所属的位置。这不是一个 php 问题。使用问题所在的标签。并非所有标签都可以使用。过度使用标签通常会导致问题被搁置或被删除。

标签: javascript


【解决方案1】:

Math.ceil() 将向上舍入,Math.floor() 将向下舍入到最接近的整数。

您需要将答案提高 100 倍以进行四舍五入,然后再除以 100 以返回小数。

此外,您的代码有很多不符合现代最佳实践和标准的地方,以及您的 if 逻辑存在一些问题。

详见内联 cmets:

window.addEventListener("DOMContentLoaded", function(){

  // Always get references to the elelements themselves, not property values.
  // That way, if you decide you need to access another property somewhere else
  // you don't have to re-scan the DOM for the same element. Also, access elements
  // using modern standards.
  var x= document.querySelector("input[name='x']");
  var y= document.querySelector("input[name='y']");
  var ans= document.getElementById("answer");
  var m = document.getElementById("meaning");
  var btn = document.getElementById("calc");
  
  // Set up button click event handler here, in the JavaScript, not in the HTML
  btn.addEventListener("click", calculate);

  function calculate() {
  
    // Next, always trim off any possible leading or trailing spaces from user input
    var xVal = x.value.trim();
    var yVal = y.value.trim();
  
    if(xVal > 0 && yVal > 0){   
  
      var final = xVal/(yVal/100*yVal/100);
      console.log("Answer = " + final);
    
      // First, multiply answer by 100
      final = final * 100;
      console.log("Answer times 100 = " + final);
  
      // Next, round answer up to nearest whole number
      final = Math.ceil(final);
      console.log("Answer times 100, rounded up to nearest whole number = " + final);
  
      // Now, divide by 100 to go back to decimals
      final = final / 100;
      console.log("Answer divided back by 100 = " + final);

      ans.textContent = final;
      
      // These should be else if, not one if after another since only
      // one of the conditions will be true.
      if(final < a){
        m.textContent = "A"
      } else if(final > a && final < b){
        m.textContent = "B"
      } else if(final > b && final < c){
        m.textContent = "C"
      } else if(final > d){
        m.textContent = "D"
      }
    } else{
      alert("Please Fill form in correctly")
    }
  }
});
.left { 
  float:left;
  width:100px; 
}

.results {
  margin-top:1em;
}

.after {
  clear:both;
  margin-top:2em;
}
<div class=form2>
 <form name="Form">
   <!-- The text that accompanies the fields should be <label> elements
        for better accessibility and for easier styling.   -->
   <label for="x" class="left">x: </label><input type="text" name="x" id="x" size="10"><br>
   <label for="y" class="left">y: </label><input type="text" name="y" id="y" size="10">
   
   <!-- Don't use inline HTML event handling attributes.
        Do you JavaScript separately. -->
   <div><input type="button" value="Calculate" id="calc"></div>
   
   <!-- Don't use form fields for displaying data. -->
   <div class="results">
     <span class="left">Answer: </span><span id="answer"></span><br>
     <span class="left">This Means: </span><span id="meaning"></span>
   </div>
   <div class="after">
     <input type="reset" value="Reset">
   </div>
</form>
</div>

【讨论】:

  • 非常感谢您的帮助。这是excellemt
【解决方案2】:

使用toFixed() 函数进行舍入。例如:final.toFixed(2);

<script language="JavaScript">
<!--
function calculate() {
var x= document.Form.x.value
var y = document.Form.y.value
if(x> 0 && y> 0){   
var final = x/(y/100*y/100)
document.Form.answer.value = final.toFixed(2);
if(final < a){
document.Form.meaning.value = "A"
}
if(final > a && final < b){
document.Form.meaning.value = "B"
}
if(final > b && final < c){
document.Form.meaning.value = "C"
}
if(final > d){
document.Form.meaning.value = "D"
}
}
else{
alert("Please Fill form in correctly")
}
}
//-->
</script>

<div class=form2>
<form name="Form">
x: <input type="text" name="x" size="10"><br />
y: <input type="text" name="y" size="10"><br />
<input type="button" value="Calculate" onClick="calculate()"><br />
Answer: <input type="text" name="answer" size="10"><br />
This Means: <input type="text" name="meaning" size="25"><br />
<input type="reset" value="Reset" />
</form>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 2014-05-09
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多