我正在使用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/ (只需将鼠标悬停在地图上以查看非常长的十进制数字)
如何对crossfilter组的值进行舍入?
该小组只提供以下方法:
你能改变一个团体的价值吗? 我想用循环来做这件事,但我在文档中找不到任何改变组值的东西: https://github.com/square/crossfilter/wiki/API-Reference
答案 0 :(得分:1)
我找到了一个解决方法,它不是我想要的真正答案,但它是我迄今为止找到的最好的答案:
通过尽可能在数据中(在尺寸和组之前)具有最大数字,我得到最接近的浮点数(最接近实数)。
(我将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 ;
})
我希望它可以帮助别人。