ecomfe / echarts-stat

Statistics tool for Apache ECharts
593 stars 309 forks source link

Histogram range 出现计算精度误差 #9

Closed ToughRover closed 6 years ago

ToughRover commented 6 years ago

Histogram方法在对float数值进行计算过程中出现精度不一致的问题, 例如range的宽度是0.02, 计算出来的range会出现类似下面的情况 0.5,0.52, 0.54000000000001, 0.56, 0.58000000000001, 0.6

对于在x轴上显示带来问题。 能否根据Range计算过程中step的精度来决定histogram range数值的精度,比如做如下修改: range.js

return function (start, stop, step) {

        var len = arguments.length;

        if (len < 2) {
            stop = start;
            start = 0;
            step = 1;
        }
        else if (len < 3) {
            step = 1;
        }
        else {
            step = +step;
        }

        var n = Math.ceil((stop - start) / step);
        var range = new Array(n + 1);

        for (var i = 0; i < n + 1; i++) {
            // range[i] = start + i * step;
            // 示例,根据step的精度来确定range的精度,使最终计算的结果中range的范围精度保持一致
            var decimalPart  = step.toString().split('.')[1];
            var precision = decimalPart ? decimalPart.length : 0;
            range[i] = Number((start + i * step).toFixed(precision));
        }
        return range;
    };
deqingli commented 6 years ago

不好意思,一直有其他的事,回复的不及时,我把 echarts 的那个issue 关了,在这个 issue 跟进

ToughRover commented 6 years ago

没关系,有人处理这个issue就好了

deqingli commented 6 years ago

请问你这个有可视化的例子么,我可以访问么,想看下实际的效果,方便我全面的改一下

ToughRover commented 6 years ago
screen shot 2018-03-12 at 3 13 09 pm

你看看这个就是一个示例,可以准备一组类似于 [0.87659, 0.68975, 0.78613]这种浮点数数组来计算histogram来复现这个问题

deqingli commented 6 years ago

嗯嗯,好,谢谢

deqingli commented 6 years ago

您好,精度问题已经解决了,会随下一版本一起发布。也欢迎您给我们提 PR