Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
C# fornisce un set di tipi numerici integrali e a virgola mobile . Esiste una conversione tra due tipi numerici, impliciti o espliciti. È necessario usare un'espressione cast per eseguire una conversione esplicita.
Conversioni numeriche implicite
La tabella seguente illustra le conversioni implicite predefinite tra i tipi numerici predefiniti:
| Da | Per |
|---|---|
| sbyte |
short, int, long, floatdouble, , decimal, onint |
| byte |
short, ushort, , uint, longulong, float, doubledecimal, , , ninto intnuint |
| breve |
int
float, long, , doubleo decimalonint |
| ushort |
int, uint, , ulongfloat, double, o decimal, ninto longnuint |
| int |
long, float, doubleo decimal, nint |
| uint |
long
float, ulong, , doubleo decimalonuint |
| long |
float, double o decimal |
| ulong |
float, double o decimal |
| float | double |
| nint |
long, float, doubleo decimal |
| nuint |
ulong, float, doubleo decimal |
Annotazioni
Le conversioni implicite da , , ulong, , nint, o nuint a float e da long, ulong, ninto nuint a double possono causare una perdita di precisione, ma mai una perdita di ordine di grandezza. longuintint Le altre conversioni numeriche implicite non perdono mai informazioni.
Si noti anche che
Qualsiasi tipo numerico integrale è convertibile in modo implicito in qualsiasi tipo numerico a virgola mobile.
Non esistono conversioni implicite nei
bytetipi esbyte. Non esistono conversioni implicite daidoubletipi edecimal.Non esistono conversioni implicite tra il
decimaltipo e ifloattipi odouble.Un valore di un'espressione costante di tipo
int(ad esempio, un valore rappresentato da un valore letterale integer) può essere convertito in modo implicito insbyte,shortbyte,nintulongushortuintonuint, se è compreso nell'intervallo del tipo di destinazione:byte a = 13; byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'Come illustrato nell'esempio precedente, se il valore costante non rientra nell'intervallo del tipo di destinazione, si verifica un errore del compilatore CS0031 .
Conversioni numeriche esplicite
La tabella seguente illustra le conversioni esplicite predefinite tra i tipi numerici predefiniti per i quali non è presente alcuna conversione implicita:
| Da | Per |
|---|---|
| sbyte |
byte, ushort, uint, ulong o nuint |
| byte | sbyte |
| breve |
sbyte, , byteushort, uint, ulongonuint |
| ushort |
sbyte, byte o short |
| int |
sbyte, byte, short, ushortuint, , ulong, onuint |
| uint |
sbyte, , byteshort, ushort, intonint |
| long |
sbyte, byte, , ushort, intuint, ulong, ninto shortnuint |
| ulong |
sbyte, byte, , ushort, intuint, long, ninto shortnuint |
| float |
sbyte, byte, , ushort, intuint, long, ulongdecimal, , , ninto shortnuint |
| doppio |
sbyte
short, byte, , ushortint, uint, long, ulong, float, decimal, nint, onuint |
| decimal |
sbyte
short, byte, , ushortint, uint, long, ulong, float, double, nint, onuint |
| nint |
sbyte, byte, , ushortint, uint, ulongo shortnuint |
| nuint |
sbyte, byte, , ushortint, uint, longo shortnint |
Annotazioni
Una conversione numerica esplicita può comportare la perdita di dati o generare un'eccezione, in genere un oggetto OverflowException.
Si noti anche che:
Quando si converte un valore di un tipo integrale in un altro tipo integrale, il risultato dipende dal contesto di controllo dell'overflow. In un contesto controllato la conversione ha esito positivo se il valore di origine è compreso nell'intervallo del tipo di destinazione. In caso contrario, verrà generata un'eccezione OverflowException. In un contesto deselezionato, la conversione ha sempre esito positivo e procede come segue:
Se il tipo di origine è maggiore del tipo di destinazione, il valore di origine viene troncato rimuovendo i bit più significativi "extra". Il risultato viene quindi trattato come un valore del tipo di destinazione.
Se il tipo di origine è minore del tipo di destinazione, il valore di origine è esteso o esteso a zero in modo che corrisponda alla stessa dimensione del tipo di destinazione. L'estensione del segno viene usata se il tipo di origine è firmato; zero-extension viene usato se il tipo di origine non è firmato. Il risultato viene quindi trattato come un valore del tipo di destinazione.
Se il tipo di origine ha le stesse dimensioni del tipo di destinazione, il valore di origine viene considerato come valore del tipo di destinazione.
Quando si converte un
decimalvalore in un tipo integrale, questo valore viene arrotondato verso zero al valore integrale più vicino. Se il valore integrale risultante non è compreso nell'intervallo del tipo di destinazione, viene generata un'eccezione OverflowException .Quando si converte un
doublevalore ofloatin un tipo integrale, questo valore viene arrotondato verso zero al valore integrale più vicino. Se il valore integrale risultante non è compreso nell'intervallo del tipo di destinazione, il risultato dipende dal contesto di controllo dell'overflow. In un contesto controllato viene generata un'eccezione OverflowException , mentre in un contesto non selezionato, il risultato è un valore non specificato del tipo di destinazione.Quando si esegue la conversione
doublein , ildoublevalore viene arrotondato al valore piùfloatfloatvicino. Se ildoublevalore è troppo piccolo o troppo grande per adattarsi alfloattipo, il risultato è zero o infinito.Quando si esegue la conversione
floatodoubleindecimal, il valore di origine viene convertito indecimalrappresentazione e arrotondato al numero più vicino dopo il 28° separatore decimale, se necessario. A seconda del valore di origine, può verificarsi uno dei risultati seguenti:Se il valore di origine è troppo piccolo da rappresentare come ,
decimalil risultato diventa zero.Se il valore di origine è NaN (non un numero), infinito o troppo grande da rappresentare come , viene generata un'eccezione
decimalOverflowException .
Quando si esegue la conversione
decimalinfloatodouble, il valore di origine viene arrotondato rispettivamente al valore odoublepiùfloatvicino.
Specificazione del linguaggio C#
Per altre informazioni, vedere le sezioni seguenti delle specifiche del linguaggio C#: