2011-01-16 23 views
16

Soy un principiante en Javascript, así que discúlpeme si sueno tonto porque aprendí algo de Javascript de W3Fools (que son tutoriales realmente difíciles, no explican nada de lo que quiero saber, pero todo lo que puedo hacer es adivinar desde mi experiencia con C++).enteros en JavaScript

Puedo estar cambiando a MDN, pero si puede recomendar cualquier otro tutorial, sería genial.

De todas formas, así que aquí está mi pregunta:

acabo de leer unas pocas líneas de this, y al parecer:

Los números en JavaScript son formato de 64 bits "de doble precisión IEEE 754 valores ", según la especificación. Esto tiene algunas consecuencias interesantes . No existe un entero en en JavaScript, por lo que tiene para tener un poco de cuidado con su aritmética si está acostumbrado a las operaciones matemáticas en C o Java.

Ya he visto que hay pocos tipos de datos (para las variables) que estoy acostumbrado de C++. Pero no esperaba que todos los números fueran automáticamente float s. ¿No hay alguna forma de usar int egers, no float? ¿Una versión futura de JavaScript será compatible con int s?

+4

MDN es un gran recurso y con frecuencia se hace referencia aquí en SO. –

Respuesta

13

En realidad, hay pocos tipos de datos en Javascript: Objetos, números y cadenas. Mientras lee, los números JS son todos flotantes de 64 bits. No hay entradas.

Firefox 4 tendrá soporte para Conjuntos escritos, donde se puede tener matrices de enteros reales y tales: https://developer.mozilla.org/en/JavaScript_typed_arrays

Hasta entonces, hay maneras de hacker para almacenar matrices de enteros como cadenas, y arrancando cada uno números enteros usando charCodeAt().

4

No creo que alguna vez sea compatible con enteros. No es un problema, ya que cada entero sin signo de 32 bits se puede representar con precisión como un número de punto flotante de 64 bits.

Los motores de JavaScript modernos pueden ser lo suficientemente inteligentes como para generar código especial cuando los números son enteros (con controles de seguridad para garantizarlo), pero no estoy seguro.

+3

Todos los motores JS (SpiderMonkey's desde su primera implementación, el primer motor JS) han utilizado int32-maths cuando es posible. – gsnedders

+2

No es un problema ... hasta que desee un int de 64 bits o más grande. – Thanatos

+1

bien, puede ser un problema bastante grande en realidad. Si envía 100000 enteros a javascript y le pide que resuma, los problemas de coma flotante pueden dar respuestas bastante extrañas. Es por eso que encontré esta pregunta. –

0

No hay soporte para números enteros. Debe ser una simple cuestión de redondear una variable cada vez que lo necesite. La sobrecarga de rendimiento no está nada mal.

0

Si realmente necesita usar números enteros, simplemente use el método de piso en cada número que encuentre.

Aparte de eso, la escritura suelta de Javascript es uno de sus puntos fuertes.

2

Utilice esta:

function int(a) { return Math.floor(a); } 

Y yo puede utilizar de esta manera:

var result = int(2.1 + 8.7 + 9.3); //int(20.1) 
alert(result);      //alerts 20 
+0

¿Hay algún otro punto en esto aparte de crear un alias leve de 'Math.floor'? –

+1

No realmente ... – qwertymk

+13

Usaría 'var int = Math.floor;' para evitar la llamada a la función adicional. – ChaosPandion