Condividi tramite


Come usare numeri interi e a virgola mobile in C#

Questa esercitazione illustra i tipi numerici in C#. Si scrivono piccole quantità di codice, quindi si compila ed esegue tale codice. The tutorial contains a series of lessons that explore numbers and math operations in C#. Queste lezioni illustrano i concetti fondamentali del linguaggio C#.

Suggerimento

Quando un blocco di frammenti di codice include il pulsante "Esegui", il pulsante apre la finestra interattiva o sostituisce il codice esistente nella finestra interattiva. Quando il frammento di codice non include un pulsante "Esegui", è possibile copiare il codice e aggiungerlo alla finestra interattiva corrente.

Esplorare la matematica dei numeri interi

Eseguire il codice seguente nella finestra interattiva.

int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);

Il codice precedente illustra le operazioni matematiche fondamentali con numeri interi. Il int tipo rappresenta un numero intero, un numero intero positivo o negativo. Usi il simbolo + per l'addizione. Altre operazioni matematiche comuni per i numeri interi includono:

  • - for subtraction
  • * per la moltiplicazione
  • / for division

Per iniziare, esplorare queste diverse operazioni. Modificare la terza riga per provare ognuna di queste operazioni. Ad esempio, per provare la sottrazione, sostituire + con - come illustrato nella riga seguente.

int c = a - b;

Provaci. Selezionare il pulsante "Esegui". Prova a moltiplicare * e dividere /. Puoi anche sperimentare scrivendo più operazioni matematiche nella stessa riga, se vuoi.

Suggerimento

Durante l'esplorazione di C# (o qualsiasi linguaggio di programmazione), si commettono errori durante la scrittura di codice. Il compilatore individua tali errori e li segnala all'utente. Quando l'output contiene messaggi di errore, esaminare attentamente il codice di esempio e il codice nella finestra interattiva per vedere cosa correggere. Questo esercizio consente di apprendere la struttura del codice C#.

Esplorare l'ordine delle operazioni

Il linguaggio C# definisce la precedenza di diverse operazioni matematiche con regole coerenti con le regole apprese in matematica. La moltiplicazione e la divisione hanno la precedenza sull'addizione e la sottrazione. Esplorare questa funzionalità eseguendo il codice seguente nella finestra interattiva:

int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);

L'output dimostra che la moltiplicazione viene eseguita prima dell'aggiunta.

È possibile forzare un ordine di operazione diverso aggiungendo parentesi intorno all'operazione o alle operazioni da eseguire per prime. Aggiungere le righe seguenti alla finestra interattiva:

d = (a + b) * c;
Console.WriteLine(d);

Esplora di più combinando molte operazioni diverse. Sostituire la quarta riga nel codice precedente con un risultato simile al seguente:

d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);

È possibile notare un comportamento interessante per i numeri interi. La divisione integer produce sempre un risultato intero, anche quando si prevede che il risultato includa una parte decimale o frazionaria.

Provare il codice seguente:

int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
Console.WriteLine(d);

Esplora la precisione e i limiti degli interi

L'ultimo esempio ha mostrato che la divisione integer tronca il risultato. È possibile ottenere il resto usando l'operatore resto , il % carattere :

int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
int e = (a + b) % c;
Console.WriteLine($"quotient: {d}");
Console.WriteLine($"remainder: {e}");

Il tipo intero C# differisce dagli interi matematici in un altro modo: il int tipo ha limiti minimi e massimi. Provare il codice seguente per visualizzare questi limiti:

int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");

Se un calcolo produce un valore che supera tali limiti, si dispone di una condizione di underflow o overflow . La risposta sembra estendersi da un limite all'altro. Per un esempio, aggiungere queste due righe nella finestra interattiva:

int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");

Si noti che la risposta è molto vicina all'intero minimo (negativo). È uguale a min + 2. L'operazione di addizione ha superato i limiti dei valori consentiti per i numeri interi. The answer is a large negative number because an overflow "wraps around" from the largest possible integer value to the smallest.

Esistono altri tipi numerici con limiti e precisione diversi che è possibile usare quando il int tipo non soddisfa le proprie esigenze. Esaminiamo ora questi tipi di numeri.

Work with the double type

Il double tipo numerico rappresenta un numero a virgola mobile a precisione doppia. Questi termini potrebbero essere nuovi per l'utente. Un numero a virgola mobile è utile per rappresentare numeri non interi che possono essere di grande o piccola entità. La precisione doppia è un termine relativo che descrive il numero di cifre binarie usate per archiviare il valore. I numeri a precisione doppia hanno due volte il numero di cifre binarie come precisione singola. Nei computer moderni è più comune usare la precisione doppia rispetto ai numeri di precisione singola. I numeri a precisione singola vengono dichiarati usando la float parola chiave . Esploriamo. Eseguire il codice seguente e visualizzare il risultato:

double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);

Si noti che la risposta include la parte decimale del quoziente. Try a slightly more complicated expression with doubles. È possibile usare i valori seguenti o sostituire altri numeri:

double a = 19;
double b = 23;
double c = 8;
double d = (a + b) / c;
Console.WriteLine(d);

L'intervallo di un valore di tipo double è maggiore di quello dei valori di tipo intero. Provare il codice seguente nella finestra interattiva:

double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");

Questi valori vengono stampati nella notazione scientifica. The number before the E is the significand. Il numero dopo il E è l'esponente, come potenza di 10.

Proprio come i numeri decimali in matematica, i valori double in C# possono avere errori di arrotondamento. Provare questo codice:

double third = 1.0 / 3.0;
Console.WriteLine(third);

Si sa che 0.3 è 3/10 e non esattamente uguale a 1/3. Analogamente, 0.33 è 33/100. Tale valore è più vicino a 1/3, ma non è ancora esatto. Indipendentemente dal numero di cifre decimali aggiunte, rimane un errore di arrotondamento.

Sfida

Provare altri calcoli con numeri di grandi dimensioni, numeri piccoli, moltiplicazione e divisione usando il double tipo . Provare calcoli più complessi.

Work with decimal types

C'è un altro tipo da imparare: il tipo decimal. Il decimal tipo ha un intervallo più piccolo, ma maggiore precisione rispetto a double. Diamo un'occhiata:

decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");

Si noti che l'intervallo è minore del double tipo . È possibile visualizzare la maggiore precisione con il tipo decimale provando il codice seguente:

double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);

decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);

Si noti che la matematica che usa il tipo decimale ha più cifre a destra del separatore decimale.

Il M suffisso nei numeri è il modo in cui si indica che una costante deve usare il decimal tipo . In caso contrario, il compilatore presuppone il double tipo .

Annotazioni

La lettera M è stata scelta come lettera più visivamente distinta tra le double parole chiave e decimal .

Sfida

Scrivere codice che calcola l'area di un cerchio il cui raggio è di 2,50 centimetri. Tenere presente che l'area di un cerchio è il raggio moltiplicato per PI. Un hint: .NET contiene una costante per PI, Math.PI che è possibile usare per tale valore. Math.PI, come tutte le costanti dichiarate nello spazio dei nomi System.Math, è un double valore. Per questo motivo, è consigliabile usare double anziché decimal i valori per questa sfida.

Si dovrebbe ottenere una risposta tra 19 e 20.

Dopo aver provato, aprire il riquadro dei dettagli per vedere come si è fatto:

:::code language="csharp" interactive="try-dotnet-method" source="./snippets/NumbersInCsharp/Program.cs" id="Challenge":::

Se vuoi, prova altre formule.

L'esercitazione interattiva "Numeri in C#" è stata completata. You can select the Tuples and types link to start the next interactive tutorial, or you can visit the .NET site to download the .NET SDK, create a project on your machine, and keep coding. La sezione "Passaggi successivi" ti riporta indietro a questi tutorial.

Per altre informazioni sui numeri in C#, vedere gli articoli seguenti: