我正在寻找一种方法来向上和向下到达nearerst 5,然后找到这两个数字的一个很好的共同点。 我需要它来绘制图表上的y-skale标题。
到目前为止,这是我的代码:
function toN5( x ) {
var i = 1;
while( x >= 100 ) {
x/=10;
i*=10;
}
var remainder = x % 5;
var distance_to_5 = (5 - remainder) % 5;
return (x + distance_to_5) * i;
}
目标是这样的: 最大值(向上舍入到最接近的5)
1379.8 -> 1500
反之亦然 - 最小值(向下舍入到最接近的5)
41.8 -> 0
然后我想找到一个像250或500
这样的共同分母0 - > 250 - > 500 - > 750 - > 1000 - > 1250 - > 1500
或:
0 -> 500 -> 1000 -> 1500
是否可以采取类似的方式?非常感谢
答案 0 :(得分:50)
如果你想将 x 舍入到最接近的500,你可以将它除以500,将其四舍五入到最接近的整数,然后再将它乘以500:
x_rounded = 500 * Math.round(x/500);
要将其四舍五入到最近的 y ,请将 y 替换为500:
x_rounded = 250 * Math.round(x/250);
答案 1 :(得分:5)
希望我的数学是正确的,但这里有各种“四舍五入”的方法
function sigfig(n, sf) {
sf = sf - Math.floor(Math.log(n) / Math.LN10) - 1;
sf = Math.pow(10, sf);
n = Math.round(n * sf);
n = n / sf;
return n;
}
function precision(n, dp) {
dp = Math.pow(10, dp);
n = n * dp;
n = Math.round(n);
n = n / dp;
return n;
}
function nearest(n, v) {
n = n / v;
n = Math.round(n) * v;
return n;
}
答案 2 :(得分:1)
使用this api,您可以使用此命令将任意数字向上或向下舍入任意数字的最接近的倍数:
$scm.round(number to be rounded).toNearest(multiple to which you want to round);
例如,如果您想将536舍入到最接近的500,则可以使用:
$scm.round(536).toNearest(500);