Javascript 如何使刻度四舍五入到#的最接近倍数?

Javascript 如何使刻度四舍五入到#的最接近倍数?,javascript,axis,d3.js,rounding,Javascript,Axis,D3.js,Rounding,此代码使用x.extent([Wed Aug 01 2012 00:00:00 GMT+0300(EEST),Tue Aug 07 2012 00:00:00 GMT+0300(EEST)])和图形宽度(1000)生成x值刻度。但是,我需要将该值四舍五入到25的最接近倍数(Math.round(x/25)*25) 通过这样做,我希望获得精确的宽度刻度,现在定义为: x.scale = d3.time.scale().domain(x.extent).range([0, dimensions.gr

此代码使用
x.extent
[Wed Aug 01 2012 00:00:00 GMT+0300(EEST),Tue Aug 07 2012 00:00:00 GMT+0300(EEST)]
)和图形宽度(1000)生成
x
值刻度。但是,我需要将该值四舍五入到25的最接近倍数(
Math.round(x/25)*25

通过这样做,我希望获得精确的宽度刻度,现在定义为:

x.scale = d3.time.scale().domain(x.extent).range([0, dimensions.graph.width]);

如何扩展x.scale以四舍五入到25的最接近倍数?

也许我有点误解,但在应用scale函数后,您不能按照您的建议转换结果吗?即:

x.axis = d3.svg.axis()
    .ticks(d3.time.days, 1)
    .tickSize(10, 5, 0)
    .scale(x.scale);
然后使用该值设置属性:

function roundScale(origVal) { return Math.round(x.scale(origVal)/25) * 25;}
你在找函数吗

.attr("x", function(d) { return roundScale(d.value); }

正确答案是文档中的
interpolateRound

返回两个数字a和b之间的插值器;插值器类似于
插值枚举器
,不同之处在于它将结果值四舍五入到最接近的整数

var xScale=d3.scaleLinear()
.domain([01100])
.范围([0,宽度])

.插值(d3.插值环);//这正是我想要的,有一个小问题-我需要它来维护其
d3.time.scale()
属性,否则
d3.svg.axis
将与
x.scale
不匹配。正确链接:
x.scale = d3.time.scale().domain(x.extent)
            .range([0, dimensions.graph.width]).nice();
var xScale = d3.scaleLinear()
    .domain([0, 100])
    .range([0, width])
    .interpolate(d3.interpolateRound); // <-- round interpolation