如何在 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/
(只需将鼠标悬停在地图上即可看到很长的十进制数字)
如何舍入交叉过滤器组的值?
群组只有这些方法可用:
- 全部
- 处置
- 订单
- 自然顺序
- 减少
- 减少计数
- 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 ;
})
希望对其他人有所帮助。
我正在用 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/ (只需将鼠标悬停在地图上即可看到很长的十进制数字)
如何舍入交叉过滤器组的值?
群组只有这些方法可用:
- 全部
- 处置
- 订单
- 自然顺序
- 减少
- 减少计数
- 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 ;
})
希望对其他人有所帮助。