仅在必要时将数字四舍五入到小数点后两位
Rounding numbers to 2 decimals only when necessary
所以我有以下代码,它从数组中提取数据并计算平均值。问题是目前,即使平均值为 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;
}
您可以在 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))
更新
更新相关测试用例
@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))
可以使用 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));
所以我有以下代码,它从数组中提取数据并计算平均值。问题是目前,即使平均值为 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;
}
您可以在 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))
更新
更新相关测试用例
@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))
可以使用 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));