计算百分比,是否有更优化的方式?

时间:2011-02-24 11:18:22

标签: javascript

var q3a1 = parseInt(valueOne); //get variables
var q3a2 = parseInt(valueTwo);
var q3a3 = parseInt(valueThree);

var totalAmountThree = Math.ceil((q3a1+q3a2+q3a3) / 100)*100; //round to nearest 100

var percentOnec = ((q3a1 / totalAmountThree) * 100); //calculate percentage
var percentTwoc = ((q3a2 / totalAmountThree) * 100);
var percentThreec = ((q3a3 / totalAmountThree) * 100);

alert("1: "+percentOnec);
alert("2: "+percentTwoc);
alert("3: "+percentThreec);

我有更好的方法来计算百分比吗?

(告诉我:http://jsfiddle.net/neuroflux/Sez3Q/

2 个答案:

答案 0 :(得分:3)

可以通过计算因子来优化这一点,需要直接扩展到百分比:

S = A+B+C
p(x)=100*x / S

所以'因素'是100/(A+B+C)

var total = a+b+c;
var scale = 100/total;

function pct(x) { return x*scale; }

当然,可以推广使用一系列输入值......

function toPctFn( values ) {
   var sum = 0;
   for( var i = 0; i != values.length; ++i ) { sum = sum + values[i]; }
   var scale = 100/sum;
   return function( x ){ 
     return x*scale;
   };
}

var inputs=[1,2,40,44,23];
var toPct=toPctFn(inputs);

for( var i = 0; i != inputs.length; ++i ) { 
   alert(""+i+": "+toPct(inputs[i])) ;
}

(见jsFiddle

此外,将舍入推迟到显示代码非常重要。这样就不会在计算中引入不必要的错误。

答案 1 :(得分:1)

您正在使用Math.ceil()首先引入舍入错误。如果没有理由先完成最接近的百分之一,最好不要理会。可能有一个重要的(取决于你正在计算的)“实际”值与你的计算之间的差异。