2009-02-01 19 views
12

Ho cercato attraverso google (forse non sono sembrato abbastanza difficile) ma non sono riuscito a trovare come trasformare Math.sqrt in un int.Javascript: Cast Math.sqrt in int?

Voglio usare Math.sqrt per un per il ciclo e credo di averne bisogno come int ma non riesco a capire come trasmettere il risultato a un int. Quindi come lo faccio?

ho provato qualcosa di simile a Java:

(int) Math.sqrt(num); 

Ma non ha funzionato.

Grazie in anticipo :)

risposta

24

Usa Math.round, Math.ceil, o Math.floor a seconda delle specifiche esigenze di arrotondamento.

"Per numeri arrotondati a interi uno di Math.round, Math.ceil e Math.floor sono preferibili e, per un risultato desiderato che può essere espresso come un intero con segno a 32 bit, l'operazione bitwise descritta di seguito potrebbe anche essere adatta ".

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

4

Math.floor lo farà. Dubito che hai anche bisogno di andare a un numero intero, però.

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

Qualcuno ha suggerito parseInt. Questo va da una stringa a una int, ma è facile trasformare un float in una stringa.

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

Ricorda che, indipendentemente da ciò che fai, JavaScript usa sempre i float. Non esiste un tipo intero.

+0

modificare la tua domanda più anziani senza re-posting. –

+0

Siamo spiacenti. All'epoca non sembravo avere la reputazione di commentare la risposta dell'altro ragazzo, che è quello che stavo cercando di fare. – Nosredna

+1

Penso che il voto negativo sia ingiustificato considerando che Nosredna non aveva il rappresentante necessario per commentare. Neutralizzato. – Cerebrus

3

L'utilizzo di parseInt(Math.sqrt(num)+"") è più lento rispetto all'utilizzo di Math.round(Math.sqrt(num)). Penso che sia perché nel primo esempio si sta creando una stringa, analizzando il valore intero di num e arrotondandolo. nel secondo esempio si prende solo int e intorno ad esso.

0

so che questo è una vecchia questione, ma immagino che per chiunque trovare questo più tardi ....

io non voglio ribadire quello che dicono le altre risposte, ma un piccolo trucco che si può fare è divertirsi:

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

il doppio bit a bit negativo rilascia qualsiasi valore dopo il punto decimale. mi è stato detto che è leggermente più veloce, ma non ne sono del tutto convinto.

EDIT: come una nota ciò arrotondare verso 0.

Problemi correlati