Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Problema arrotondamenti
lunedì 02 maggio 2016 - 17.11
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
memmo77
Profilo
| Expert
683
messaggi | Data Invio:
lun 2 mag 2016 - 17:11
In una select effettuo un'operazione di divisione e successiva moltiplicazione per 100. Il risultato che dovrei ottenere è il seguente:
print (0.141000000000 / 401968.611000000000) * 100 = 0.0000350773657796877080
Invece ottengo, per quante conversioni tenti di fare:
756x394
85Kb
Cosa potrei fare per ottenere un buon arrotondamento con decimal(24,12)?
Grazie
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
lun 2 mag 2016 - 17:31
in tutte le divisione che riporti [1] / [2]
prova a scrive CAST([1] AS DECIMAL(24,12)) /CAST([2] AS DECIMAL(24,12))
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
lun 2 mag 2016 - 17:34
in tutte le divisione che riporti [1] / [2]
prova a scrive CAST([1] AS DECIMAL(24,12)) /CAST([2] AS DECIMAL(24,12))
memmo77
Profilo
| Expert
683
messaggi | Data Invio:
lun 2 mag 2016 - 17:37
Già provato, finchè faccio la divisione [1]/[2] (anche con cast), funziona correttamente.
L'arrotondamento avviene col moltiplicarli * pvt.FATTORE (anche se castato, che in questo caso vale 100).
Il risultato che ne esce è sempre 0.000035 perdendosi tutti gli altri decimali. Al massimo, se aggiungo anche il cast finale di tutto il conteggio, ottengo:
0.000035000000
Ma non i "veri" decimali
Grazie mille
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
lun 2 mag 2016 - 17:45
non la vedo proprio così la tua istruzione, un cast globale non è come un cast a singolo campo.
se scrivi così:
(CAST([1] AS DECIMAL(24,12)) /CAST([2] AS DECIMAL(24,12))) / CAST(pvt.Fattore AS DECIMAL(24,12))
cosa succede?
memmo77
Profilo
| Expert
683
messaggi | Data Invio:
mar 3 mag 2016 - 09:22
Niente da fare, ottengo sempre: 0.000035
Una prova davvero strana che ho provato a fare è quella di convertire il fattore:
CAST([1] AS DECIMAL(24,12)) / CAST([2] AS DECIMAL(24,12)) * cast(pvt.FATTORE as tinyint)
In sostanza se lo converto tinyint il calcolo viene 0.0000350774
Il problema è che tinyint non posso utilizzarlo perchè a volte, questo fattore è 1000 e la conversione, ovviamente, va in errore.
In pratica è il fattore (che è un int), che da questo problema facendo si che si perdano i decimali.
Grazie ancora per lo scambio di idee.
Ciao
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
mar 3 mag 2016 - 16:39
molto strano, anche perchè tinynt sarebbe in parole povere un int più piccolo...
prova a questo punto un cast decimal (8,4) oppure money vedi cosa succede
memmo77
Profilo
| Expert
683
messaggi | Data Invio:
mar 3 mag 2016 - 17:15
Allora, direi che quasi ci siamo, con:
([1] / [2]) * cast(pvt.FATTORE as decimal(8,4))
ottengo 0.000035077
Se lo riducessi a ([1] / [2]) * cast(pvt.FATTORE as decimal(4,1))
otterrei 0.0000350774
Però il mio fattore arriva da un int (che mi dicono dovrebbe essere massimo 1000), però, fidarsi è bene .... quindi, credo che il compromesso 8,4 vada bene.
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !