2017-11-16 6 views
0

私は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%であるべきであるが、間違っているものを見つけることができませんでした、私の場合には起こりませんでした。

+0

あなたのロジックと計算を教えてください、私はところでそれら*の差を計算します*。 – gurvinder372

+1

1916は362の529%です。1916は362よりも429%も大きくなります。後者は計算しますが、前者を望むようです。 –

+0

期待される出力は何ですか? – gurvinder372

答えて

0

362から1916までの差は529%であるべきですが、私の場合は の場合は発生しませんでした。

あなたは、あなたの質問で述べたように、外観だけではなく、割合のために2つの要素間の差の割合を計算しています。

単にパーセント使用して、この単純なコードを取得するには

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

説明

  • ((num2/num1)*100).toFixed(1)エルス
  • を返し、その後、NUM1とNUM2は同じではありませんし、両方の数字が0でない場合、返信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);

+0

num2がnum1より大きい場合はどうなりますか?また0から40まで、パーセントは100%です、あなたのロジックはその部分を逃しました。 –

+0

あなたの入力に期待される出力を分けてください。 – gurvinder372

関連する問題