如何在 crossfilter 中舍入 reduceSum 的值?

How to round values of reduceSum in crossfilter?

我正在用 dc.js 制作地图,交叉过滤器函数 reduceSum() 引入了一些舍入误差。

简化示例:

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

group.all()在记录数为3221条时,会包含一个值32.21000000000216,应该是32.21(3221乘以0.01的和)。

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

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

群组只有这些方法可用:

你能改变组的值吗?
我正在考虑用循环来做,但我在文档中找不到任何用于更改组值的内容: 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 ;
})

希望对其他人有所帮助。