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);
我有更好的方法来计算百分比吗?
答案 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()首先引入舍入错误。如果没有理由先完成最接近的百分之一,最好不要理会。可能有一个重要的(取决于你正在计算的)“实际”值与你的计算之间的差异。