0

我正在使用此查询来获取贴纸的使用百分比(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;
        }
4

2 回答 2

3

这只是一个四舍五入的错误。如果您需要将其加起来为 100,只需将值四舍五入到小数点后 1 或 2 位(对于饼图来说应该足够了),然后将最后一个重新计算为100 - sum(1..(n-1))(顺便说一下,这是伪代码)。

于 2013-11-05T22:20:01.763 回答
1

您不能认真地期望浮点算术具有完美的精度,对吗?

于 2013-11-05T22:14:29.490 回答