Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在d3中格式化插值字符串或数字_Javascript_D3.js - Fatal编程技术网

Javascript 在d3中格式化插值字符串或数字

Javascript 在d3中格式化插值字符串或数字,javascript,d3.js,Javascript,D3.js,我用d3制作文本动画,显示用户完成任务的进度。例如,如果他们完成了32.51%的任务,文本将在2秒钟左右的时间内从0%变为32.51% 为此,我将在svg文本元素上使用d3的attrTween方法与d3.interpolate结合使用。插值效果很好,但是我在格式化文本时遇到了一些问题。我希望文本始终显示4位数字,因此0%=00.00%,4.31%=04.31%等等。如果能够做到这一点,而不必对插值器返回的内容进行后期处理,那就太好了。换句话说,在将其放入DOM之前,不必获取返回的百分比并检查是否

我用d3制作文本动画,显示用户完成任务的进度。例如,如果他们完成了32.51%的任务,文本将在2秒钟左右的时间内从0%变为32.51%

为此,我将在svg文本元素上使用d3的attrTween方法与d3.interpolate结合使用。插值效果很好,但是我在格式化文本时遇到了一些问题。我希望文本始终显示4位数字,因此0%=00.00%,4.31%=04.31%等等。如果能够做到这一点,而不必对插值器返回的内容进行后期处理,那就太好了。换句话说,在将其放入DOM之前,不必获取返回的百分比并检查是否有4位数字,并在每一侧添加零填充

作为测试,我尝试通过将a和b值设置为插值器来指定我想要的格式,如so
d3.interpolate(“00.00”,“30.00”)
,但最终文本是“30”,后面的零被截断


有什么建议吗?

您可以向d3添加自定义插值器。插值器-请参阅。文档中给出的示例与您的示例非常接近-唯一真正的变化是指定输出格式,在您的情况下应为:

d3.format('05.2f'); // 0-padding, string width 5, 2 decimal places
将此插入doc示例(注意,我还适当地更改了regex并添加了百分号):


哇,非常感谢!在引用文档和让我意识到将格式化程序推到d3.0中时,它像一个符咒和+1一样工作
d3.interpolators.push(function(a, b) {
  var re = /^(\d\d\.\d\d)%$/, ma, mb, f = d3.format('05.2f');
  if ((ma = re.exec(a)) && (mb = re.exec(b))) {
    a = parseFloat(ma[1]);
    b = parseFloat(mb[1]) - a;
    return function(t) {
      return f(a + b * t) + '%';
    };
  }
});

d3.interpolate("00.00%", "30.00%")(1/5); // "06.00%"
d3.interpolate("00.00%", "30.00%")(1/3); // "10.00%"