2012-02-15 14 views

risposta

31

Qui stai lavorando con numeri interi. Prova a utilizzare i decimali per tutti i numeri nel tuo calcolo.

decimal share = (18m/58m)*100m; 
+0

Non è intrinsecamente chiaro il motivo per cui il "18" letterale è compilato in un numero intero. Per chiarire, in base alle specifiche del linguaggio (struttura lessicale> token> letterali) qualsiasi letterale scritto utilizzando le "cifre decimali" da 0 a 9 sono [Integer Literals] (https://msdn.microsoft.com/en-us/library/aa664674 (v = vs.71) .aspx) che compila in "il primo di questi tipi in cui il suo valore può essere rappresentato:' int', 'uint',' lungo', 'ulong'.", una volta aggiunto il " m "suffisso il letterale è ora visto come un [Reale letterale] (https://msdn.microsoft.com/en-us/library/aa691085 (v = vs.71) .aspx) che compila come tipo' decimale'. – Quantic

+0

Esempio: 'var check = (1/(decimale) 7) * 100 = 14.285714' la conversione del denominatore in decimale risolverà il problema. – Vijayaraghavan

20

18/58 è una divisione intera, che si traduce in 0.

Se volete divisione decimale, è necessario utilizzare i valori letterali decimali:

decimal share = (18m/58m) * 100m; 
+2

Beh, questo è nuovo per me stavo solo seguendo la mia calcolatrice. –

3

Poiché i numeri sono numeri interi e si esegue la divisione in interi.

18/58 è 0 in divisione intera.

7

Poiché alcune persone si collegano a questo praticamente da qualsiasi thread in cui il risultato del calcolo è uno 0, sto aggiungendo questo come soluzione in quanto non tutte le altre risposte si applicano agli scenari dei casi.

Si applica il concetto di dover eseguire calcoli su vari tipi per ottenere quel tipo come risultato, tuttavia sopra mostra solo "decimale" e utilizza la forma breve come 18m come una delle variabili da calcolare.

// declare and define initial variables. 
int x = 0; 
int y = 100; 

// set the value of 'x'  
x = 44; 

// Results in 0 as the whole number 44 over the whole number 100 is a 
// fraction less than 1, and thus is 0. 
Console.WriteLine((x/y).ToString()); 

// Results in 0 as the whole number 44 over the whole number 100 is a 
// fraction less than 1, and thus is 0. The conversion to double happens 
// after the calculation has been completed, so technically this results 
// in 0.0 
Console.WriteLine(((double)(x/y)).ToString()); 

// Results in 0.44 as the variables are cast prior to calculating 
// into double which allows for fractions less than 1. 
Console.WriteLine(((double)x/(double)y).ToString()); 
1

Ogni volta che incontro situazioni del genere, ho semplicemente trasmesso il numeratore.

double x = 12.0/23409; 
decimal y = 12m/24309; 

Console.WriteLine($"x = {x} y = {y}"); 
Problemi correlati