如何在crossfilter中舍入reduceSum的值?

时间:2017-11-20 15:38:36

标签: javascript dc.js crossfilter

我正在使用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组的值进行舍入?

该小组只提供以下方法:

  • 所有
  • 处置
  • 顺序
  • orderNatural
  • 减少
  • reduceCount
  • reduceSum
  • 除去
  • 尺寸

你能改变一个团体的价值吗? 我想用循环来做这件事,但我在文档中找不到任何改变组值的东西: https://github.com/square/crossfilter/wiki/API-Reference

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方法,它不是我想要的真正答案,但它是我迄今为止找到的最好的答案:

通过尽可能在数据中(在尺寸和组之前)具有最大数字,我得到最接近的浮点数(最接近实数)。 (我将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 ;
})

我希望它可以帮助别人。