我正在使用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
最佳答案
我找到了一种解决方法,这不是我一直在寻找的真正答案,但这是我到目前为止找到的最好的答案:
通过在数据中(在维和组之前)具有最大的数字,可以得到最接近的浮点数(最接近于实数)。
(我将incidence
与bigMultiplicator=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 ;
})
我希望它可以帮助其他人。