Javascript 使用正确的数字创建路径

Javascript 使用正确的数字创建路径,javascript,d3.js,Javascript,D3.js,这应该有一个非常直接和明显的答案,但我的研究并没有给我带来一个答案。这就是问题所在。这是我的路径: svg.selectAll(".path") .data(data.chartData, function(d){return d.vNm;}) .enter().append("path") .attr("d", function(d){ return("M " + x(d.vNm) + " " + y(1200 + d.values.r

这应该有一个非常直接和明显的答案,但我的研究并没有给我带来一个答案。这就是问题所在。这是我的路径:

svg.selectAll(".path")
    .data(data.chartData, function(d){return d.vNm;})
    .enter().append("path")
        .attr("d", function(d){
            return("M " + x(d.vNm) + " " +  y(1200 + d.values.reduce(function(sum, d){return sum + d.amount;},0))
            + " L " + 43 + x(d.vNm) + " " + y(1200 + d.values.reduce(function(sum, d){return sum + d.amount;}, 0))
            + " L " + 21.5 + x(d.vNm) + " " + y(d.values.reduce(function(sum, d){ return sum + d.amount;}, 0)) + " z"
            );
        });
如您所见,我正在尝试将43和21.5添加到x(d.vNm)中。我试过用几种不同的方法来解决这个问题,但都没有用。这就是我尝试时在元素中显示的内容:

以及显示器:

(我现在不关心标签,它们很快就会变成一个图例,而且我在每个条上都有黑色的矩形。我只需要三角形在正确的位置。)

当你做
“L”+43+x(d.vNm)
时,你要求Javascript将
43
添加到字符串
“L”
,这将导致
“l43”
。然后以相同的方式添加调用
x
的结果。如果希望将数字添加为数字,则需要用括号告诉Javascript添加的优先级顺序:

" L " + (43 + x(d.vNm))

一般来说,您不需要手动向刻度的输出中添加某些内容,这可以通过调整刻度的范围来实现。

当您操作一个
浮点数时,几乎不可能用二进制表示该数字,如果它们需要绝对完美,你应该尝试截断或四舍五入,如果这对你精确的情况有用的话。例如@我的解码器很完美。非常感谢。