我有一个计算函数,用于确定一个数组中两个值之间的百分比差异。
在我进行计算后,返回的值是十进制形式,如
0: 6.439999737456044
1: 7.7490311455816805
2: 2.3720164855984383
3: 4.12554213772474
我试图将数组中的每个数字四舍五入到最接近的整数。所以索引0=6,索引1=8,索引2=2,索引3=4。
我在计算结束时使用了math.round方法,但它对返回的数字没有影响,因为它们返回的是上面显示的小数。
这是我的代码。
const Numerators = [];
const Denominators = [];
Array.forEach(({ DataValue }, i) => {
const arrToPushTo = i % 2 === 0 ? Denominators : Numerators;
arrToPushTo.push(Number(DataValue.replace(/,/g, '')));
});
const Percentage = Numerators.map((Numerator, i) => {
const Denominator = Denominators[i];
return 100 * Math.abs((Denominator - Numerator) / ((Denominator + Numerator) / 2));
math.Round(Percentage)
});
console.log(Percentage)
我还尝试创建另一个变量 const Round = math.Round(Percentage)
但是当控制台记录这个变量的时候,我被返回的是 NaN
math.Round
并没有突变原始值。你需要将结果分配给一个变量或从函数中返回。你要把这个也从循环中移出来。后面什么都没有 return
在循环中执行。
类似于。
const Percentage = Numerators.map((Numerator, i) => {
const Denominator = Denominators[i];
return 100 * Math.abs((Denominator - Numerator) / ((Denominator + Numerator) / 2));
});
const percentages = Percentage.map((percent) => math.Round(percent));
console.log(percentages);
EDIT: 我刚刚看到你已经有一个返回值了.
补充一些关于一般JavaScript代码风格的小知识。
Array
是一个保留字,不能用作变量名。如果你想使用 Array.prototype.forEach
语法为 [1,2,3,4].forEach((num) => doSomething(num))
只是做 Math.floor(val)
或 ~~val
如果你处理的是非负值的数