Domanda

Ho un numero: 94.800.620.800

Il galleggiante è tipo dati a 4 byte. Int32 è anche tipo dati a 4 byte.

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

Si prega di spiegare questo problema. Perché ricevo un errore quando uso INT32. Perché posso usare questo numero per il tipo di dati float perché entrambi sono tipi di dati a 4 byte. Grazie.

È stato utile?

Soluzione

Perché il numero che stai cercando di assegnare è più grande del più grande valore possibile Per un numero di tipi Int32, che sembra essere 2.147.483.647. Da notare, il valore massimo per a Single è 3.402823 × 1038.

Altri suggerimenti

Il valore massimo per INT32 è 2.147.483.647, che è inferiore a 94.800.620.800.

Un galleggiante può assumere un valore nell'intervallo seguente: ± 1,5 × 10-45 a ± 3,4 × 1038

Inoltre, dai un'occhiata a questo domanda - Qual è la differenza tra il tipo di dati galleggianti e interi quando la dimensione è la stessa in Java?. È una domanda Java, ma il concetto è lo stesso e c'è una spiegazione dettagliata della differenza, anche se hanno le stesse dimensioni.

Perché quel numero è troppo grande per un int a 4 byte. Valori scalari come Int32 avere un limite minimo e massimo (che sono -231 e 231 - 1 in questo caso, rispettivamente) e semplicemente non puoi archiviare un valore al di fuori di questo intervallo.

I numeri di punta mobile vengono archiviati in modo completamente diverso, quindi non riceverai errori del compilatore con valori enormi, solo possibili problemi di precisione in seguito, durante il runtime.

A causa di questi tipi rappresentazione interna.

float Usa qualcosa come io, d ^ n in cui sono la parte integrante, d è la parte decimale e n è l'esponente (ovviamente, questo accade nella base 2).

In questo modo, puoi archiviare numeri più grandi in un float, ma non sarà accurato come a, diciamo, Int32 Nel conservare numeri integrali. Se provi a convertire

float f = 94800620800; 

A un tipo integrale abbastanza grande da archiviare il suo valore, potrebbe non essere lo stesso del 94800620800 iniziale.

I tipi di numeri interi sono rappresentazioni esatte, mentre i numeri dei punti galleggianti sono una combinazione di cifre e esponenti significativi.

Il Pagina wiki a punta galleggiante sta spiegando come funziona.

Forse dovresti leggere il messaggio di errore? ;)

Error   Integral constant is too large

Il valore massimo di un int a 32 bit è 2.147.483.647

Il galleggiante d'altra parte funziona perché memorizza una mantissa ed esponente, piuttosto che un solo numero, in modo che possa far fronte a una gamma molto più grande a spese di eventualmente perdere la precisione

prova a stampare il tuo galleggiante e otterrai 94800620000 invece di 94800620800 Man mano che i pezzi inferiori vengono persi

Int32 ha un valore massimo di 2.147.483.647. Il tuo valore è molto più alto.

Date un'occhiata al System.int32.maxValue

Il valore fornito dell'espressione costante non rientra nell'intervallo del tipo di dati int.

L'intervallo di INT32 passa da - 2.147.483.648 a 2.147.483.647. La tua variabile è fuori portata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top