it-swarm.it

Come ottenere un risultato fluttuante, dividendo i suoi valori per intero?

Vorrei specificare il numero di cifre decimali quando eseguo una divisione tra 2 numeri interi come:

select 1/3

Questo attualmente restituisce 0. Mi piacerebbe che restituisse 0,33.

Qualcosa di simile a:

select round(1/3, -2)

Ma questo non funziona. Come posso ottenere il risultato desiderato?

148
LaBracca

I suggerimenti di stb e xiowl vanno bene se stai cercando una costante. Se hai bisogno di usare campi o parametri esistenti che sono numeri interi, puoi lanciarli per essere float prima:

SELECT CAST(1 AS float) / CAST(3 AS float)

o

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
235
Richard

Perché SQL Server esegue la divisione integer. Prova questo:

select 1 * 1.0 / 3

Questo è utile quando si passano gli interi come parametri.

select x * 1.0 / y
60
xiaowl

Non è necessario lanciarli entrambi. Il tipo di dati risultante per una divisione è sempre quello con la precedenza del tipo di dati superiore . Quindi la soluzione deve essere:

SELECT CAST(1 AS float) / 3

o

SELECT 1 / CAST(3 AS float)
37
M.S.

uso

select 1/3.0

Questo farà il lavoro.

24
stb

Potrebbe essere un po 'in ritardo, ma rendersi conto che CASTing a FLOAT non è consentito in MySQL e genererà un errore quando si tenta di CAST(1 AS float) come dichiarato a MySQL dev .

La soluzione a questo è semplice. Basta fare

(1 + 0.0)

Quindi utilizzare ROUND per ottenere un numero specifico di cifre decimali come

ROUND((1+0.0)/(2+0.0), 3)

L'SQL precedente divide 1 per 2 e restituisce un float a 3 posizioni decimali, poiché in esso sarebbe 0.500.

Si può CAST ai seguenti tipi: binario, char, data, datetime, decimal, json, nchar, signed, time, e unsigned .

10
Trouble Zero

Sembra che questo trucco funzioni in SQL Server ed è più breve (basato su risposte precedenti)

SELECT 1.0*MyInt1/MyInt2

O:

SELECT (1.0*MyInt1)/MyInt2
7
Troglo

Usa questo

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

Qui in questo sql prima converti in float o moltiplica per 1.00. Quale output sarà un numero float. Qui considero 2 posizioni decimali. Puoi scegliere ciò di cui hai bisogno.

3
nazmul.3026

Se sei venuto qui (proprio come me) per trovare la soluzione per valore intero , ecco la risposta:

CAST(9/2 AS UNSIGNED)

ritorna 5

2
trojan