Question

J'ai un numéro: 94800620800

flotteur est de 4 octets de type de données. Int32 est de 4 octets de type de données.

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

S'il vous plaît expliquer ce problème. Pourquoi je reçois une erreur lors de l'utilisation Int32. Pourquoi je peux utiliser ce numéro pour le type de données float, car les deux sont de type de données de 4 octets. Merci.

Était-ce utile?

La solution

Parce que le numéro que vous essayez de assign est plus grand que le valeur la plus élevée possible pour un certain nombre de type Int32, qui se trouve être 2147483647. A noter, la valeur maximale pour un Single est 3,402823 × 10 38 .

Autres conseils

La valeur maximale pour Int32 est 2147483647 -. Qui est inférieure à 94800620800

Un flotteur peut prendre une valeur dans la plage suivante: ± 1,5 × 10-45 à ± 3,4 × 1038

En outre, consultez cette question SO - quelle est la différence entre le type de données float et entier lorsque la taille est même en java? . Il est une question Java, mais le concept est le même et il y a une explication détaillée de la différence, même si elles sont de la même taille.

Parce que ce nombre est trop grand pour un 4 octets int. Les valeurs scalaires comme Int32 ont un minimum et limite maximale (qui sont -2 31 et 2 31 - 1 dans ce cas, respectivement), et vous ne pouvez pas stocker une La valeur en dehors de cette plage.

nombres à virgule flottante sont stockés de façon totalement différente, de sorte que vous ne serez pas les erreurs du compilateur avec des valeurs énormes, que possible des problèmes de précision plus tard, lors de l'exécution.

En raison de ces types de représentation interne.

float utilise quelque chose comme i, d ^ n où i est la partie entière, d est la partie décimale et n est l'exposant (bien sûr, cela se produit en base 2).

De cette façon, vous pouvez stocker plus grand nombre dans un float, mais il ne sera pas précis comme, par exemple, Int32 à stocker des nombres entiers. Si vous tentez de convertir

float f = 94800620800; 

à un assez grand type intégral pour stocker sa valeur, il ne peut pas être le même que le 94800620800 initial.

types de représentations sont exactes Entiers, tandis que les nombres à virgule flottante sont une combinaison de chiffres significatifs et exposant.

Le virgule flottante page wiki est d'expliquer comment cela fonctionne.

Peut-être que vous devriez lire le message d'erreur? ;)

Error   Integral constant is too large

valiue le maximum d'un 32 bit est int 2147483647

le flotteur d'autre part fonctionne parce qu'il stocke une mantisse et exposant, plutôt qu'un seul numéro, il peut donc faire face à une gamme beaucoup plus au détriment de la possibilité de perdre la précision

essayez d'imprimer votre flotteur et vous obtiendrez 94800620000 au lieu de 94800620800 que les bits inférieurs sont perdus

Int32 a une valeur maximale de 2147483647. Votre valeur est beaucoup plus élevé.

Jetez un oeil à system.int32.maxvalue

valeur fournie de l'expression constante est pas dans la plage de type de données int.

La gamme de Int32 va de - 2.147.483.648 à 2.147.483.647. Votre variable est ainsi hors de portée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top