将数字保留两位小数

29

我有:

onclick="document.getElementById('field1').value = 
Math.round((parseFloat(document.getElementById('field2').value,2)*100))/100 + 
Math.round((parseFloat(document.getElementById('field3').value,2)*100))/100;"

大多数数字可以舍入到两个小数点,这正是我所需要的。

然而,对于像下面这样的例子:

onclick="document.getElementById('field1').value = 
Math.round((parseFloat(document.getElementById('21.29').value,2)*100))/100 + 
Math.round((parseFloat(document.getElementById('54.70').value,2)*100))/100;"  

第一个字段返回了75.99000000000001,如何保持一致地将其修剪为75.99

5个回答

58
var num = 5 / 6;

var display = num.toFixed(2)

num outputs: 0.8333333333333334

display outputs: "0.83"

3
.toFixed方法会将整数转换为字符串,对吗?是否有一种JavaScript方法可以将整数截断到某个小数位数,而仍保持其为整数?该方法只进行截断操作,不进行四舍五入。 - Kyle Vassella
@KyleVassella—之后你可以将其转换为数字:Number(num.toFixed(2))。另外,它不能变成整数,因为整数没有小数。 - Daniel Apt
1
如果您的数字为-2.3699,则您的代码将四舍五入到2位小数 - 问题是要修剪到2位小数。 - Abdeali Chandanwala
2
0.999.toFixed(2) does not trim to 0.99, but rounds up to 1 - cdalxndr

9

使用toFixed(2)方法将其限制在两位小数:

(Math.round((parseFloat(document.getElementById('21.29').value,2)*100))/100 + 
  Math.round((parseFloat(document.getElementById('54.70').value,2)*100))/100).toFixed(2);

1
parseFloat(value).toFixed(2) == "NaN" ? value : parseFloat(value).toFixed(2) 不错。你的代码将其加倍了。 - Bitfinicon

9
这个怎么样:
parseFloat(document.getElementById('21.29').toFixed(2));

toFixed方法应该可以很好地为您处理四舍五入。

2
你缺少一个括号。 - SeanMC

3

我遇到了类似的问题 - 我不想四舍五入,而是只保留两位小数。

我编写了这个函数,并在需要仅保留两位小数时使用,找到了完美的解决方案。

原始答案:Original Answer

function upto2Decimal(num) {
    if (num > 0)
      return Math.floor(num * 100) / 100;
    else
      return Math.ceil(num * 100) / 100;
  }

if you call

upto2Decimal(2.3699) or upto2Decimal(-2.3699)
// returns 2.36 or -2.36

请使用您的浏览器JS控制台检查此解决方案。"Original Answer"翻译成"最初的回答"。

1
这里存在浮点精度问题的潜在风险。例如:Math.floor(1234.1 * 100) / 100 的结果将是 1234.09 - filipows

0

你可以使用:

function myFunction() 
{
      var num = "-54.987656";
    var roundedValue = roundMethod(num,5);   
    document.getElementById("demo").innerHTML = roundedValue;
}
function roundMethod(numberVal, roundLimit) // This method will not add any additional 0, if decimal places are less than the round limit
{
    var isDecimal = numberVal.indexOf(".") != -1;    
  if(isDecimal)
  {
      if(numberVal.split(".")[1].length > roundLimit)
      {
        return parseFloat(numberVal).toFixed(roundLimit).toString();    
      }else
      {
          return numberVal;
      }
  }else
  {
      return numberVal;
  } 
}
<html>
<body>

<p>Click the button to display the fixed number.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>
</body>
</html>


trim 不意味着四舍五入。 - cdalxndr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接