计算一个百分比,有没有更优化的方法?
问题描述:
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);
有没有更好的办法,我要计算一个比例?计算一个百分比,有没有更优化的方法?
答
您可能优化这个通过计算因子,直接扩展到百分比需要:
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)
此外,推迟四舍五入显示代码非常重要。这样你就不会在计算中引入不必要的错误。
+0
冷静,我如何(我目前的代码)可以得到正确的百分比。你的代码(虽然很好),是矫枉过正的,我也不能真正使用Array的想法:'((+1给你) – 2011-02-24 11:55:55
答
你使用Math.ceil引入四舍五入的错误,首先就行了()。如果没有理由首先凑到最近的一百,最好把它排除在外。 “真实”价值与您的计算之间可能存在显着差异(取决于您计算的内容)。
为什么四舍五入到最接近的100?这似乎没有什么意义,但也许我失去了一些东西... – 2011-02-24 11:22:43
它最初被输出到98%或99%:/ – 2011-02-24 11:23:17
四舍五入到100的没有意义的,我要么。由于所有值都是从一开始的整数,因此只有在计算百分比时才会得到浮点结果。但是如果你四舍五入,你的百分比永远不会达到100%。或者说,我相信...... – 2011-02-24 11:26:14