Javascript 仅在必要时将数字舍入为2位小数

Javascript 仅在必要时将数字舍入为2位小数,javascript,arrays,tofixed,Javascript,Arrays,Tofixed,下面的代码从数组中提取数据并计算平均值。问题是,目前,即使平均值是3,也似乎是3.00。我想要的是,如果需要的话,平均值只能保留到小数点后2位。代码如下: var calculated = playerdata.map((player) => { const rounds = player.slice(2); return { player, average: average(rounds).toFixed(2), best: Math.min(...ro

下面的代码从数组中提取数据并计算平均值。问题是,目前,即使平均值是3,也似乎是3.00。我想要的是,如果需要的话,平均值只能保留到小数点后2位。代码如下:

var calculated = playerdata.map((player) => {
  const rounds = player.slice(2);

  return {
    player,
    average: average(rounds).toFixed(2),
    best: Math.min(...rounds),
    worst: Math.max(...rounds)
  };
}); 

function average(numbers) {
  return numbers.reduce((a, b) => a + b, 0) / numbers.length;
}

您可以使用
+
预先设置
平均值(轮数).toFixed(2)
。像

+average(rounds).toFixed(2)
工作实例:

var roundTo2=函数(num){
return+num.toFixed(2);
}
控制台日志(roundTo2(3))
控制台日志(roundTo2(3.1))
控制台日志(roundTo2(3.12))

console.log(roundTo2(3.128))
您可以使用
+
预先添加
平均数(rounds).toFixed(2)
。像

+average(rounds).toFixed(2)
工作实例:

var roundTo2=函数(num){
return+num.toFixed(2);
}
控制台日志(roundTo2(3))
控制台日志(roundTo2(3.1))
控制台日志(roundTo2(3.12))

console.log(roundTo2(3.128))
@Maaz的解决方案也可以使用,但这里有一个更为不言自明的解决方案:

average(rounds) * 100 % 1 ? average(rounds).toFixed(2) : average(rounds)
仅当数字超过小数点后2位时,才会进行四舍五入:

f=function(a){返回a*100%1?a.toFixed(2):a}
控制台日志(f(3))
控制台日志(f(3.1))
控制台日志(f(3.12))

console.log(f(3.128))
@Maaz的解决方案也可以使用,但这里有一个更为不言自明的解决方案:

average(rounds) * 100 % 1 ? average(rounds).toFixed(2) : average(rounds)
仅当数字超过小数点后2位时,才会进行四舍五入:

f=function(a){返回a*100%1?a.toFixed(2):a}
控制台日志(f(3))
控制台日志(f(3.1))
控制台日志(f(3.12))

log(f(3.128))
可以将数字的舍入整数值与自身进行比较,以查看它是否有十进制数

函数printVal(num){
var isDecimal=数学圆整(num)!==num;
返回isDecimal?num.toFixed(2):num;
}
控制台日志(printVal(3.01));
控制台日志(printVal(3.1));

控制台日志(printVal(3))可以将数字的舍入整数值与自身进行比较,以查看它是否具有十进制数

函数printVal(num){
var isDecimal=数学圆整(num)!==num;
返回isDecimal?num.toFixed(2):num;
}
控制台日志(printVal(3.01));
控制台日志(printVal(3.1));

控制台日志(printVal(3))
不是您要问的问题,但您可以删除第二个参数(
0
)以减少。默认情况下,在第一次迭代中,
a
将只是
numbers
数组的第一个元素,对于求和来说,它不会改变您的结果。这不是您要问的问题,但您可以删除第二个参数(
0
)以减少。默认情况下,在第一次迭代中,
a
将只是
numbers
数组的第一个元素,对于求和,它不会改变结果。如果第二个小数点为零,则将删除它。仅适用于简单测试用例,但并非所有用例
toFixed
都返回字符串,并将
+
(一元运算符-and)前置到字符串将其转换为数字。该操作还将删除十进制表示法中的任何尾随零。@charlietfl此操作失败的原因是什么?With
+
在这两种情况下都返回3.1。如果不是整数,则Right和OP需要2位小数。如果是零,则删除第二个小数点。仅适用于简单测试用例,但并非所有用例
toFixed
都返回字符串,并将
+
(一元运算符-and)前置到字符串将其转换为数字。该操作还将删除十进制表示法中的任何尾随零。@charlietfl此操作失败的原因是什么?With
+
在这两种情况下都返回3.1。如果不是整数,则Right和OP需要2位小数