Domanda

Ho un database con una tabella, contenente due campi interi.

Quando provo a ottenere una percentuale (fieldta / (fieldba + fieldb)), il valore è 0.

double percentage = fieldA+fieldB // WORKS; 5+5=10
double percentage = fieldA / (fieldA+fieldB) // DOES NOT WORK; 5+5=0
.

Allora, qual è il problema qui?Grazie ..

È stato utile?

Soluzione

Quando si genera un codice tag, si ottiene 5/10, che come numero intero viene troncato a 0, è necessario eseguire una doppia divisione se si desidera 0,5 come risultato. cioè qualcosa del genere:

double percentage = (double)fieldA/(fieldA+fieldB)

Altri suggerimenti

I Assumi fieldA e fieldB sono numeri interi?Se sì, dovresti essere consapevole che dividere due numeri interi comportano anche un numero intero, indipendentemente da ciò che è sul lato sinistro dell'equazione.

Così Dividere fieldA da (fieldA+fieldB) Risultati in un valore <1 che si traduce a zero.Vedi Divisione integer su wikipedia.

Per correggere il problema, semplicemente lanciare almeno un operando in un tipo di punto flottante come E.G.:

double percentage = fieldA/(double)(fieldA+fieldB)
.

Dal momento che Fieda e Fieldb sono numeri interi, l'espressione fieldA / (fieldA+fieldB)is del modulo int / int che significa che utilizzerai la divisione integro, in questo caso - 5/10 = 0, come la Divisione Integer risolve x = am + b e in questo caso 5 = a*10 + b a = 0, b = 5

puoi farlo comunque:

double percentage = (double)fieldA / (fieldA+fieldB);
.

Potrebbe essere necessario eseguire il cast dei campi come double prima di applicare l'operazione

prova questo: doppia percentuale= (doppia) campoA / (doppia) (campoA + campoB)

Se entrambi i campi sono integer, quindi l'aggiunta dei due risultati interi anche interer. Prova questo

Float Risultato= (galleggiante) ((A * 100) / (B + A));

Risposta: Risultato= 50.0

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