Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Query con risultati incomprensibili...
Forum - C# / VB.NET - Query con risultati incomprensibili...

Avatar
Bat (Normal User)
Newbie


Messaggi: 3
Iscritto: 01/10/2008

Segnala al moderatore
Postato alle 10:59
Mercoledė, 01/10/2008
Ciao a tutti,
scrivo perchč mi trovo in una situazione che non riesco a spiegarmi.
Ho una query sql che deve calcolare una percentuale partite giocate/vinte di alcuni tennisti(dovrebbe restituirmi un valore arrotondato alla seconda cifra decimale).

"SELECT Tennisti.Nome, Tennisti.Cognome, Tennisti.Giocate, Tennisti.Vittorie, ROUND((Tennisti.Vittorie * 100) / Tennisti.Giocate, 2) AS perc
FROM ....."
Valori immessi: Vittorie = 30, Giocate = 33
Risultato: dovrebbe darmi 90,91 invece mi restituisce 90

Dopo ore di sbattimento ho fatto un tentativo per vedere se, per qualche motivo, la query troncava i decimali.
Ho modificato l'operazione come segue:
"...ROUND((Tennisti.Vittorie * 125.45) / Tennisti.Giocate, 2) AS perc..."
ed ho visto che mi restituiva come risultato 114,05000000000
quindi ho capito che si comportava nel modo corretto se moltiplicavo per un numero con decimali.

A questo punto ho provato a modificare la query come segue:
"SELECT Tennisti.Nome, Tennisti.Cognome, Tennisti.Giocate, Tennisti.Vittorie, ROUND((Tennisti.Vittorie * 100) / (Tennisti.Giocate + 0.0000000001), 2) AS perc
FROM ....."
e, finalmente ho ottenuto il risultato voluto: perc=90,9100000000

Ma, mi rendo conto che č un risultato ottenuto artificialmente e mi piacerebbe capire perchč mi da questo problema.
Spero di essemi spiegato bene.
Grazie.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 11:08
Mercoledė, 01/10/2008
Si comporta cosė perchč tutti i numeri che utilizzi sono interi. Se inserisci un float, il risultato diviene di tipo float perchč questo tipo ha una precedenza maggiore sugli interi, come specificato da questa tabella:
http://msdn.microsoft.com/en-us/library/ms190309.aspx
Io ti consiglierei di usare:
Codice sorgente - presumibilmente Plain Text

  1. ROUND((Tennisti.Vittorie * 100.00) / Tennisti.Giocate, 2)


PM Quote
Avatar
Bat (Normal User)
Newbie


Messaggi: 3
Iscritto: 01/10/2008

Segnala al moderatore
Postato alle 11:23
Mercoledė, 01/10/2008
Grazie per il prezioso aiuto.

PM Quote