Ecco il codice che sto usando nell'esempio:
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2;
PRINT @weight
Ecco il risultato:
47
638
0
Vorrei sapere perché sta tornando 0
invece di0,073667712
Risposte:
Quando usi solo numeri interi in una divisione, otterrai una divisione intera. Quando usi (almeno uno) double o float, otterrai una divisione in virgola mobile (e la risposta che vuoi ottenere).
Così puoi
Non eseguire semplicemente il cast del risultato della divisione intera per raddoppiare: la divisione era già stata eseguita come divisione intera, quindi i numeri dietro il decimale sono già persi.
Perché è un numero intero. È necessario dichiararli come numeri in virgola mobile o decimali o lanciarli nel calcolo.
Semplicemente moltiplicare la parte inferiore della divisione per 1.0 (o tutte le cifre decimali desiderate)
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
PRINT @weight
se lo dichiari come float o qualsiasi formato decimale verrà visualizzato
0
solo
Per esempio :
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
Uscita: 0
Se vuoi l'output come
0.073667712
Per esempio
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
In SQL Server la divisione diretta di due numeri interi restituisce un numero intero anche se il risultato dovrebbe essere il float. Di seguito è riportato un esempio per spiegarlo:
--1--
declare @weird_number_float float
set @weird_number_float=22/7
select @weird_number_float
--2--
declare @weird_number_decimal decimal(18,10)
set @weird_number_decimal=22/7
select @weird_number_decimal
--3--
declare @weird_number_numeric numeric
set @weird_number_numeric=22/7
select @weird_number_numeric
--Right way
declare @weird_number float
set @weird_number=cast(22 as float)/cast(7 as float)
select @weird_number
Solo l'ultimo blocco restituirà 3,14285714285714. Nonostante il secondo blocco definito con la giusta precisione il risultato sarà 3.00000.