web-dev-qa-db-fra.com

Comment obtenir un résultat float en divisant deux valeurs entières?

Je voudrais spécifier le nombre de chiffres décimaux lorsque je divise en 2 nombres entiers comme:

select 1/3

Cela renvoie actuellement 0. Je voudrais qu'il retourne 0,33.

Quelque chose comme:

select round(1/3, -2)

Mais ça ne marche pas. Comment puis-je atteindre le résultat souhaité?

151
LaBracca

Les suggestions de stb et xiowl sont acceptables si vous recherchez une constante. Si vous devez utiliser des champs existants ou des paramètres qui sont des entiers, vous pouvez les convertir en flottants:

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

ou

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

Parce que SQL Server effectue une division entière. Essaye ça:

select 1 * 1.0 / 3

Ceci est utile lorsque vous passez des entiers en tant que paramètres.

select x * 1.0 / y
62
xiaowl

Il n'est pas nécessaire de les lancer tous les deux. Le type de données de résultat pour une division est toujours celui avec le plus haut priorité du type de données . La solution doit donc être:

SELECT CAST(1 AS float) / 3

ou

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

utilisation

select 1/3.0

Cela fera le travail.

26
stb

Peut-être un peu tard, mais sachez que CASTing to FLOAT n'est pas autorisé dans MySQL et générera une erreur lorsque vous tenterez de CAST(1 AS float) comme indiqué à MySQL dev =.

La solution à ce problème est simple. Il suffit de faire

(1 + 0.0)

Ensuite, utilisez ROUND pour obtenir un nombre spécifique de décimales, comme

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

Le code SQL ci-dessus divise 1 par 2 et renvoie un nombre à 3 décimales, comme dans 0.500.

On peut CAST aux types suivants: binaire, caractère, date, date/heure, décimal, json, nchar, signé, heure, et unsigned .

10
Trouble Zero

On dirait que cette astuce fonctionne dans SQL Server et est plus courte (basée sur les réponses précédentes)

SELECT 1.0*MyInt1/MyInt2

Ou:

SELECT (1.0*MyInt1)/MyInt2
7
Troglo

Utilisez ceci

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

Ici, dans ce premier sql converti d'abord pour float ou multiplie par 1,00 .Quelle sortie sera un nombre float. Ici, je considère 2 décimales. Vous pouvez choisir ce dont vous avez besoin.

3
nazmul.3026

Si vous êtes venu ici (comme moi) pour trouver la solution pour valeur entière, voici la réponse:

CAST(9/2 AS UNSIGNED)

renvoie 5

2
trojan