Perché non riesco a ottenere la percentuale usando Int

Per favore perdona le mie conoscenze di programmazione. So che questa è una cosa semplice, ma non capisco perché il risultato sia sempre 0. Perché il decimale andrà bene?

int a = 100; int b = 200; decimal c = (a / b) * 100; 

Grazie molto.

    La divisione intera tronca sempre il resto. Questo viene fatto nel momento in cui il numero è diviso, non quando è assegnato alla variabile (come suppongo tu abbia ipotizzato).

     decimal c = ((decimal)a / b) * 100; 

    Il valore a / b restituirà 0 sempre poiché sono numeri interi. Quindi, quando i valori all’interno delle parentesi sono valutati, lo stai facendo tecnicamente

     decimal c = (0) * 100 

    Meglio fare,

     decimal c = ((decimal)a/(decimal)b) * 100 

    100/200 è 1/2 o 0,5. Dato che stai usando ints, si arrotonda a 0 (zero). E 0 * 100 è ancora 0. La parte all’interno delle parentesi viene sempre valutata per prima: se vuoi farlo funzionare, usa:

     decimal c = (a * 100) / b; 

    Modifica: se vuoi un valore più preciso piuttosto che una “percentuale intera” (33.333% anziché 33%), dovresti usare la risposta di Bragaadeesh.

    Viene eseguito un calcolo matematico intero e il risultato viene quindi archiviato come decimale. 100/200 in matematica intera è 0. Per ottenere la tua percentuale, lanciare almeno un valore in decimale prima di eseguire il calcolo.

     decimal c = (a / (decimal)b) * 100; 

    Nelle lingue fortemente tipizzate, il risultato delle operazioni matematiche è solitamente lo stesso tipo del tipo più grande.

    C # ha una lista di conversioni numeriche implicite che farà.

    Generalizzazione di questo elenco: i tipi integrali possono essere convertiti in tipi a virgola mobile, ma non viceversa. I tipi interi possono anche essere convertiti implicitamente in decimal , ma i tipi a virgola mobile non possono.

    Nota: questo significa anche che il cast di uno dei to in un altro tipo comporterà che l’intera risposta sia quel tipo. es: (decimal) a / b * 100.0 = 50.0

    tl; dr:

    In C #:

     int / int = int int + decimal = decimal decimal + int = decimal int / int * decimal = (int / int = int) * decimal = decimal int - float = float int * double = double float / decimal = an error int - uint = an error (either that or ulong) 

    La matematica che viene eseguita è ancora matematica intera.

    (a / b) (100/200 o 1/2) viene eseguito su due numeri interi, quindi il risultato è zero. Zero * 100 è … beh, ancora zero.

    Il problema che si verifica è con l’ordine delle operazioni (aeb sono numeri interi, quindi viene eseguito un calcolo matematico intero).

    Suggerisco questo:

    decimal c=((decimal)a)/((decimal)b)*100;

    Questo costringerà i matematici ad eseguire i valori decimali che cerchi.

    int può essere solo numeri interi, quindi 100/200 sarà 0. 0 * 100 è ancora 0. Cambia il tipo in un decimale, e funzionerà

    Rendilo decimal c = (a * 100) / b;

    Durante l’utilizzo di numeri interi, questo ‘/’ sta per DIV e questo ‘%’ per MOD. DIV è il quoziente della divisione, MOD è il resto. Quindi, 100/200 = 0 e 100% 200 = 100.

    Quindi, nel tuo caso devi cambiare i tipi a e b in decimal .