我正在使用dc.js制作地图,并且交叉过滤器功能reduceSum()引入了一些舍入错误。

简化示例:

group = dimension.group().reduceSum(function(e) { return 0.01; });


当记录数为3221时,group.all()将包含一个值32.21000000000216。它应该是32.21(3221和0.01的总和)。

您可以在这里看到我正在谈论的效果:https://epistat.wiv-isp.be/
(只需将鼠标悬停在地图上即可查看很长的十进制数字)

如何舍入交叉过滤器组的值?

该小组只有以下几种可用方法:


所有
处置
订购
orderNatural
降低
reduceCount
reduceSum
去掉
尺寸
最佳


您可以更改组的价值吗?
我正在考虑通过循环来执行此操作,但是我在文档中找不到用于更改组值的任何内容:
https://github.com/square/crossfilter/wiki/API-Reference

最佳答案

我找到了一种解决方法,这不是我一直在寻找的真正答案,但这是我到目前为止找到的最好的答案:

通过在数据中(在维和组之前)具有最大的数字,可以得到最接近的浮点数(最接近于实数)。
(我将incidencebigMultiplicator=99999999相乘;根据我的测试,越大越好)

然后在reduceSum中,我除以那个大数:

group = dimension.group().reduceSum(function(e) { return e.incidence / bigMultiplicator; });


最后,我将dc.js标题显示中的数字四舍五入:

.title(function(d) {
    return d.key + ' : ' + Math.round(d.value * 100)/100 ;
})


我希望它可以帮助其他人。

09-25 16:20