0

所以我有以下代码从数组中提取数据并计算平均值。问题是,目前,即使平均值为 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;
}
4

3 回答 3

3

你可以在前面average(rounds).toFixed(2)加上+. 像

+average(rounds).toFixed(2)

工作示例:

var roundTo2 = function(num) {
  return +num.toFixed(2);
}

console.log(roundTo2(3))
console.log(roundTo2(3.1))
console.log(roundTo2(3.12))
console.log(roundTo2(3.128))

更新

更新相关的测试用例

于 2017-05-27T13:14:48.460 回答
2

@Maaz 的解决方案也有效,但这里有一个更不言自明的解决方案:

average(rounds) * 100 % 1 ? average(rounds).toFixed(2) : average(rounds)

仅当数字超过小数点后 2 位时才会四舍五入:

f = function(a){return a * 100 % 1 ? a.toFixed(2) : a}

console.log(f(3))
console.log(f(3.1))
console.log(f(3.12))
console.log(f(3.128))

于 2017-05-27T13:20:35.137 回答
-1

可以将数字的舍入整数值与自身进行比较,以查看它是否具有小数使用Math.round()

function printVal(num){ 
  var isDecimal = Math.round(num) !== num; 
  return isDecimal ? num.toFixed(2) : num;  
}

console.log(printVal(3.01));
console.log(printVal(3.1));
console.log(printVal(3));

于 2017-05-27T13:32:44.813 回答