与之前的数字百分比算法缺陷进行比较

时间:2017-11-16 11:22:59

标签: javascript algorithm math

我在数组中有8个项目,我想计算它们之间的差异。但我的代码有缺陷,不同的数组集输出错误。

这里有什么问题?

const calculate_different_in_percentage = (num1, num2) => {

  //zero handling
  if (num2 === 0 && num1 > num2) {
    return 100
  }

  if (num1 === 0 && num1 < num2) {
    return 100
  }

  let result = 0
  if (num1 > num2) {
    result = ((num1 - num2) / num1) * 100
  } else if (num2 > num1) {
    result = ((num2 - num1) / num2) * 100
  } else {
    result = 0
  }

  if (!Number.isFinite(result)) result = 0

  return result.toFixed(1)
}

https://jsfiddle.net/5ptfqgcw/2/

从362到1916年,差异应该是529%,但在我的情况下并没有发生,也无法发现错误。

1 个答案:

答案 0 :(得分:0)

  从362到1916年差异应该是529%但是没有发生   在我的情况下,无法发现什么是错的。

您正在按照出现顺序计算两个元素之间的差异百分比,而不仅仅是您在问题中提到的百分比。

简单地使用这个简单的代码来获取百分比

const calculate_different_in_percentage = (num1, num2) =>    (num2 != 0 && num1 != 0) ? ((num2/num1)*100).toFixed(1) : 0;

<强>解释

  • 如果num1和num2不相同且两个数字都不为0,则返回((num2/num1)*100).toFixed(1)
  • 否则,请返回0

<强>演示

let arr = [{ "total_count": 40}, {  "total_count": 20},{"total_count": 0}, {"total_count": 100}, {"total_count": 362}, {"total_count": 1916}, {"total_count": 4046}, {"total_count": 2473}];

const calculate_different_in_percentage = (num1, num2) => (num2 != 0 && num1 != 0) ? ((num2 / num1) * 100).toFixed(1) : 0;

const result = [];

arr.forEach((obj, i) => {
  if (!i) return
  result.push({
    count: obj.total_count,
    difference: calculate_different_in_percentage(arr[i - 1].total_count, obj.total_count)
  })
})

console.log(result);