¿Por qué no puedo pasar un gran valor como INT32?
-
28-10-2019 - |
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.
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.