web-gelistirme-sc.com

İki tamsayı değerini bölerek float sonucu nasıl elde edilir?

Aşağıdaki gibi 2 tam sayı arasında bölünme yaptığımda ondalık basamak sayısını belirtmek isterim:

select 1/3

Bu şu anda 0 döndürür. 0,33 döndürmesini istiyorum.

Gibi bir şey:

select round(1/3, -2)

Ama bu işe yaramıyor. İstenilen sonucu nasıl elde edebilirim?

151
LaBracca

Eğer bir sabit arıyorsanız stb ve xiowl'dan gelen önerileri gayet iyi. Var olan alanları veya tamsayı olan parametreleri kullanmanız gerekiyorsa, önce onları kayan nokta olarak kullanabilirsiniz.

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

veya

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

Çünkü SQL Server tamsayı bölme işlemini gerçekleştirir. Bunu dene:

select 1 * 1.0 / 3

Bu tamsayıları param olarak geçtiğinizde faydalıdır.

select x * 1.0 / y
62
xiaowl

İkisini de dökmek gerekli değildir. Bir bölüm için sonuç veri türü her zaman daha yüksek olandır veri türü önceliği . Dolayısıyla çözüm şöyle olmalı:

SELECT CAST(1 AS float) / 3

veya

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

kullanım

select 1/3.0

Bu işi yapacak.

26
stb

Biraz gecikmiş olabilirsiniz, ancak CASTFLOAT ile _inging'in MySQL'e izin verilmediğini ve CAST(1 AS float) 'de MySQL dev ' de belirtildiği gibi bir hataya neden olacağını fark edin. =.

Bu geçici çözüm, basit bir işlemdir. Sadece yap

_(1 + 0.0)
_

Ardından, gibi belirli sayıda ondalık basamağı elde etmek için ROUND kullanın

_ROUND((1+0.0)/(2+0.0), 3)
_

Yukarıdaki SQL, 1'e 2'ye bölünür ve şamandırayı, _0.500_ gibi, 3 ondalık basamağa döndürür.

Kişi CAST ifadesini aşağıdaki türlere koyabilir: binary, char, date, datetime, ondalık, json, nchar, signed, time, ve işaretsiz .

10
Trouble Zero

Görünüşe göre bu numara SQL Server'da çalışıyor ve daha kısa (önceki yanıtlara göre)

SELECT 1.0*MyInt1/MyInt2

Veya:

SELECT (1.0*MyInt1)/MyInt2
7
Troglo

Bunu kullan

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

Burada bu sql'de önce float'a dönüşür veya 1.00 ile çarpılır. Hangi çıkış bir float numarası olur? 2 ondalık basamak düşünün. İhtiyacınız olanı seçebilirsiniz.

3
nazmul.3026

Buraya (tıpkı benim gibi) integer value çözümünü bulmaya geldiyseniz, işte cevap:

CAST(9/2 AS UNSIGNED)

5 döndürür

2
trojan