2012-09-25 60 views
-1

在JavaScript中,我可能会生成一个随机数,可能是3,123或3,001或2790等。哪个JavaScript方法将帮助我返回一个目标整数,因为这些值...如何检测JavaScript整数是否接近另一个整数?

3,123或3,001或2790更接近3000,而不是4000或2000或1000.

感谢您的任何建议。

+1

你的问题是不明确的,你要得到一个数字,最接近给定的目标,朝着不同距离的接近千元目标还是别的? – Mahn

+0

是它的一个目标整数我正在拍摄。希望理解并给了我所寻找的解决方案。 – blackhawk

+0

我为你解决了我的问题马恩 – blackhawk

回答

2

尝试:

var rand_num = Math.floor(Math.random() * 10000); 
Math.round((rand_num)/1000) * 1000; 

如果rand_num是3123,3001或2790,将分别减少到3.123两种,3.001和2.729,四舍五入到3.0,再乘以成为3000

+0

我调整了一下,但这让我走上了成功的道路!非常感谢你希望! – blackhawk

+0

没问题,祝你好运! –

+1

这是我用的.. \t var floor_score = Math.floor(game.score); var rounded_score = Math.round((floor_score)/ 10000)* 10000;再次感谢 – blackhawk

4

你可以对它们进行排序:

var numbers = [3123, 3001, 2790, 4000, 2000, 1000]; 
var target = 3000; 
var closest = numbers.sort(function(a, b) { 
    var a = Math.abs(a - target); 
    var b = Math.abs(b - target); 

    return a < b ? -1 : (a > b ? 1 : 0); 
}); 

closest包含3000通过距离来分类的数字。

或者你可以使用很长的一行:

var sorted = numbers.map(function(value, index) { 
    return [Math.abs(value - 3000), index]; 
}).sort().map(function(value, index) { 
    return numbers[value[1]]; 
}); 
+0

这是一个非常出色的答案。 –

+0

谢谢Blender – blackhawk

+0

你不能依靠默认的排序功能来排序数字。它根据字符串化的值进行排序。我不确定为什么第一个'.map'返回一个数组。这种排序将运行在看起来像“123,0”,“1,1”,“210,2”等的值上......' –

相关问题