Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 将数字舍入到相同的距离_Javascript - Fatal编程技术网

Javascript 将数字舍入到相同的距离

Javascript 将数字舍入到相同的距离,javascript,Javascript,是否有办法将不同的值舍入,使其具有相同的“距离”?例如,我有以下值: 100 105.3 110.7 115.1 当我使用Math.round()时,数字之间的距离不同: 100 105 // distance is 5 to the previous value 111 // distance is 6 to the previous value 115 // distance is 4 to the previous value 当然,我可以使用Math.floor()或Math.ce

是否有办法将不同的值舍入,使其具有相同的“距离”?例如,我有以下值:

100
105.3
110.7
115.1
当我使用Math.round()时,数字之间的距离不同:

100
105 // distance is 5 to the previous value
111 // distance is 6 to the previous value 
115 // distance is 4 to the previous value
当然,我可以使用Math.floor()或Math.ceil(),但问题是,在运行时,值会不同,并且所有数字之间的距离永远不会相同

对于SVG对象,我需要这个:

line.setAttribute('x1', Math.round(x1)); // x1 will have values like 85, 130.3, 175.6, 220.89999999999998 for example

如果您只考虑前面的值,我会定义一个curried函数,用于您感兴趣的距离

下面是使用距离
5
的演示。使用
map
,您可以在数据数组上运行此操作,以强制每个条目与上一个条目保持定义的距离


编辑

在函数中添加了
Math.round()
,不过您也可以在函数的返回值上使用它

const previousDistance=(距离)=>(上一个,当前)=>{
如果(当前>上一个){
返回数学圆((当前-上一个>距离)?上一个+距离:当前);
}否则{
返回Math.round((上一个-当前>距离)?上一个-距离:当前);
}
}
const previousDistanceFive=previousDistance(5);
//外部距离(以下)
console.log(以前的距离五(5,-1));/>0
//内距离(以下)
console.log(以前的距离五(5,1.1));//->1.
//相等的
console.log(以前的距离五(5,5));/>5.
//内距离(以上)
console.log(以前的距离五(5,9.123));/>9
//外部距离(以上)
console.log(以前的距离五(5,11));/>10
//---阵列演示
常量arr=[0,5,7,16,17,10,16];//->[0, 5, 7, 12, 17, 12, 15]
const roundedArr=arr.map((元素,i)=>{
如果(i>0){
返回以前的距离5(arr[i-1],elem);
}否则{
返回元素;
}
});

log(“阵列演示:”,roundedArr)圆<代码> 100 和<代码> 115.1 <代码>,然后在中间生成2个值。我不会真的认为“舍入”与你感兴趣的差异有关。问题是,我不确定您希望它如何工作:每个值是否不允许大于与前一个值的绝对距离?这需要一个自定义算法。你如何确定距离?你几乎没有提供足够的信息。您的号码是否总是按不递减顺序排列?这组数字的预期输出是什么?距离应该是任意一个距离值,但应该是相同的。我有85130.3、175.6、220.8999999998或85116.0208333333343147.04166666666669178.0625这样的值,并希望对其进行四舍五入,使这些值具有相同的距离。谢谢。我对SVG行使用舍入,如下所示:line.setAttribute('x1',Math.round(x1));其中x1将是85、130.3、175.6、220.899999998等值。我尝试了你的函数,但它不能正确工作(它不能将数字四舍五入为整数)。我这样使用line.setAttribute('x1',previousDistanceFive(x1,5))@JCss查看编辑-我添加了
Math.round()
。根据你的描述,这应该行得通。如果不是,那么我不确定我是否理解。我变成了这样的结果:80125171216,它们彼此不相等。