Pregunta

Tengo un número: 94,800,620,800

Float es de 4 bytes de tipo de datos. INT32 también es tipo datos de 4 bytes.

float f = 94800620800; // ok
Int32 t = 94800620800; // error

Explique este problema. Por qué recibo un error cuando uso Int32. Por qué puedo usar este número para el tipo de datos Float porque ambos son de tipo de datos de 4 bytes. Gracias.

¿Fue útil?

Solución

Porque el número que intenta asignar es más grande que el mayor valor posible para varios tipos Int32, que resulta ser 2,147,483,647. A tener en cuenta el valor máximo para un Single es 3.402823 × 1038.

Otros consejos

El valor máximo para INT32 es de 2,147,483,647, que es inferior a 94,800,620,800.

Un flotador puede tomar un valor en el siguiente rango: ± 1.5 × 10−45 a ± 3.4 × 1038

Además, mira esta pregunta ¿Cuál es la diferencia entre el tipo de datos de flotación y entero cuando el tamaño es el mismo en Java?. Es una pregunta de Java, pero el concepto es el mismo y hay una explicación detallada de la diferencia, a pesar de que son del mismo tamaño.

Porque ese número es demasiado grande para un 4 byte int. Valores escalar como Int32 tener un límite mínimo y máximo (que son -231 y 231 - 1 En este caso, respectivamente), y simplemente no puede almacenar un valor fuera de este rango.

Los números de puntos flotantes se almacenan de manera totalmente diferente, por lo que no recibirá errores del compilador con valores enormes, solo posibles problemas de precisión más adelante, durante el tiempo de ejecución.

Debido a esos tipos de representación interna.

float Utiliza algo como yo, d ^ n donde yo es la parte integral, D es la parte decimal y n es el exponente (por supuesto, esto sucede en la base 2).

De esta manera, puede almacenar números más grandes en un float, pero no será preciso como un, digamos, Int32 en almacenar números integrales. Si intentas convertir

float f = 94800620800; 

Para un tipo integral lo suficientemente grande como para almacenar su valor, puede no ser lo mismo que el 94800620800 inicial.

Los tipos de enteros son representaciones exactas, mientras que los números de puntos flotantes son una combinación de dígitos y exponentes significativos.

los Página de wiki de punto flotante está explicando cómo funciona esto.

¿Quizás debería leer el mensaje de error? ;)

Error   Integral constant is too large

El valor máximo de un int 32 bits es 2,147,483,647

El flotador, por otro lado, funciona porque almacena una mantissa y un exponente, en lugar de un solo número, por lo que puede hacer frente a un rango mucho mayor a expensas de perder precisión

intente imprimir su flotador y obtendrá 94800620000 en vez de 94800620800 Como se pierden los bits inferiores

INT32 tiene un valor máximo de 2,147,483,647. Su valor es mucho mayor.

Echa un vistazo a System.int32.MaxValue

El valor proporcionado de la expresión constante no está dentro del rango del tipo de datos int.

El rango de INT32 va de - 2,147,483,648 a 2,147,483,647. Su variable está fuera de rango.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top