我正在使用此查询来获取贴纸(pdo)的使用百分比:
SELECT
id_sticker,
CAST((COUNT(*) / :stickers_count * 100) AS UNSIGNED) as percentage
FROM user_sticker AS sticker_total
WHERE id_user_to = :id_user
GROUP BY id_sticker
ORDER BY percentage DESC
这是最终结果:
{
"data": [
{
"id_sticker": 2,
"percentage": 28.5714285714
},
{
"id_sticker": 1,
"percentage": 14.2857142857
},
{
"id_sticker": 3,
"percentage": 14.2857142857
},
{
"id_sticker": 5,
"percentage": 14.2857142857
},
{
"id_sticker": 6,
"percentage": 14.2857142857
},
{
"id_sticker": 7,
"percentage": 14.2857142857
}
]
}
百分比的总和是99.9999999999 ...它应该是100(即我正在使用的饼图组件触发错误)。有任何想法吗?谢谢!
解
我在抓取数据后结束了这个php修复:
$dif = 100;
foreach($result as $item) {
$dif = $dif - $item['percentage'];
}
if($dif > 0) {
$result[0]['percentage'] += $dif;
} elseif($dif < 0) {
$result[count($result)-1]['percentage'] += $dif;
}
答案 0 :(得分:3)
这只是一个舍入错误。如果你需要它最多加100,只需将值舍入到1或2个小数位(对于饼图应该足够)并重新计算最后一个为100 - sum(1..(n-1))
(顺便说一下,这是伪代码)。
答案 1 :(得分:1)
你不能认真地期待使用浮动算术的完美precision,对吗?