2009-02-01 8 views
12

Я искал через google (возможно, я не выглядел достаточно сложно), но я не мог найти, как включить Math.sqrt в int.Javascript: Cast Math.sqrt to int?

Я хочу использовать Math.sqrt для для цикла, и я предполагаю, что мне это нужно как int, но я не могу понять, как отличить результат от int. Итак, как мне это сделать?

Я пытался что-то похожее на Java:

(int) Math.sqrt(num); 

Но это не сработало.

Заранее спасибо :)

ответ

24

Использование Math.round, Math.ceil или Math.floor в зависимости от ваших конкретных потребностей округления.

«Для округления чисел до целых чисел предпочтительны один из Math.round, Math.ceil и Math.floor и для желаемого результата, который может быть выражен как 32-битное целое число со знаком, побитовая операция, описанная ниже, может также подойти «.

- http://www.jibbering.com/faq/faq_notes/type_convert.html#tcNumber

4

Math.floor будет делать это. Однако вам даже нужно пойти в целое число.

Math.floor(Math.sqrt(num)); 
5

Кто-то предложил parseInt. Это идет от строки к int, но легко превратить float в строку.

parseInt(Math.sqrt(num)+"") 

Помните, что независимо от того, что вы делаете, JavaScript всегда использует поплавки. Не существует целочисленного типа.

+0

Редактируйте старый вопрос без повторной проводки. –

+0

Извините. В то время у меня не было репутации, чтобы прокомментировать ответ другого парня, и это то, что я пытался сделать. – Nosredna

+1

Я думаю, что отрицательное голосование необоснованно, учитывая, что у Ноздренны не было необходимой репутации для комментариев. Нейтрализованы. – Cerebrus

3

Использование parseInt(Math.sqrt(num)+"") происходит медленнее, чем при использовании Math.round(Math.sqrt(num)). Я думаю, это потому, что в первом примере вы создаете строку, анализируя целое значение num и округляя его. во втором примере вы просто берете int и вокруг него.

0

я знаю, что это старый вопрос, но я цифра для тех, кто найти это позже ....

я не буду повторять то, что говорят другие ответы, но забавная маленькая хитрость, вы можете сделать это:

Math.sqrt(2); //1.41...... 
~~Math.sqrt(2); //1 

двойной побитовый отрицательный падает после чего после десятичной точки. Мне сказали, что это немного быстрее, но я не совсем уверен.

EDIT: в качестве примечания это будет округлено к 0.