我的任务是一个有趣的问题。基本上,我必须计算3个不同的百分比:
SELECT @LowPercent = CAST(ROUND((@LowCount / @ValidCount) * 100.0, 0) AS INT)
SELECT @MidPercent = CAST(ROUND((@MidCount / @ValidCount) * 100.0, 0) AS INT)
SELECT @HighPercent = CAST(ROUND((@HighCount / @ValidCount) * 100.0, 0) AS INT)
但是,百分比的总和不能超过100.
请考虑以下情形:假设中间计算(例如@ XXXCount / @ ValidCount * 100.0)计算为1.8,91.5和6.6。舍入到0小数位产生2,92和7,总和为101.除了简单的“经验法则”,例如“抵消最高数字”,是否有直接的方法来满足这一要求?
感谢。
答案 0 :(得分:2)
根据斧头的建议,如何保持低位和高位,并将@MidPercent更改为:
SELECT @MidPercent = 100 - (@LowPercent + @HighPercent)
答案 1 :(得分:2)
没有正确的方法来获得您想要的结果。将总和设为100的唯一正确方法是不首先对值进行舍入。
你已经是正确的结果。舍入每个值会给出舍入误差。如果您随后添加了值,则会累积错误,并且您得到的总数与添加未包含的值的总数不同。
通过更改值以获取特定总和,您将引入另一个错误,但是处于任意值。如果您仍想这样做,您只需计算前两个中的第三个值,无论您在何处添加错误都无关紧要,因为结果不正确。没有正确的方法可以添加这样的错误。
答案 2 :(得分:1)
首先,为什么int
?
如果你真的想使用int,那么更好的选择可能会降低最高优先级。
或的
你可以减去最接近的.5
如果您需要0个位置,如果您进行一轮可能会出现问题:)所以您必须选择放置单位的位置。