2016-10-04 132 views
0

我创建具有3段圆环图:百分比不增加高达100%

enter image description here

当用户将鼠标悬停在颜色区域的每一个它显示的比例为100%。目前每个部分如下;绿色是78%,黄色是13%,红色是8%。如果将所有这些加在一起并不等于100%,则等于99%

每个部分的值都是来自终点的整数,我试图将所有数据转换为百分比。

对于这个图表I有三个值:

var values = [1397, 234, 149]; 

添加时这些值需要等于100%:

var sum = values.reduce((a, b) => a + b, 0); // this works great 

为了确定每个部分我使用的百分比:

var value = 0; 

values.forEach(function(number) { 
    console.log(number + ' = ' + (number/sum) * 100); 
    result += (number/sum) * 100; 
}); 

哪个产生以下几点:

1397 = 78.48314606741573 
234 = 13.146067415730336 
149 = 8.370786516853933 
result = 100 

现在,这是我认为问题所在。我无法显示浮点值,因为它不是百分比值。我决定用Math.round()来创建我认为不合适的整数。

如何将每个浮动值转换为等于100%的百分比?是否有替代Math.round()

+0

那么你会如何用铅笔和纸做? – Pointy

+0

铅笔和纸张?真?只是为了澄清,我来这里之前尝试了相当长的一段时间。不需要毫无意义的评论。 – Mike

+0

为什么这被标记为精确重复?请提供一个确切的问题的链接,我会很高兴遵循它。 – Mike

回答

3

问题是你四舍五入。由于每个数字都有一个分数,导致每个分数都被置位,所以在最终结果中丢失了所述分数。如果你总结每个分数,你会得到1.这是你错过的。这通常是如何显示这些类型的图表。

但是,如果您担心总数不等于100%,则可能需要对结果进行一些“欺骗”。 做到这一点的一种方法是查看每个分数并将最大分数增加1来解释这一点。您也可以将最大的整数增加1,但可能不如前者准确。这会给你79%,13%和8%的结果,等于100.

+0

感谢您解释它。我对JS很陌生,我想也许有一个功能可能会照顾到这一点。我会和客户谈谈并讨论这个软肋的想法。 – Mike