2016-04-04 15 views
0

Bir hesaplamayı C# 'dan TSQL'ye aktarmaya çalışıyorum ve gereken hassasiyet düzeyine ulaşmada bazı zorluklar yaşıyorum. takılı bazı sorunlu değişkenlerle formülün bir örnek şudur: Bir formülün sonucunun kesinliğini artırın TSQL

(6.4 + (10 - 6.4) * 0.5) * 0.75

C# bu yürütmek

ben sonuç 6.1499999999999995 olsun. Ancak, bunu TSQL'de seçersem 6.1500'a yuvarlanır.

TSQL'de daha yüksek hassasiyet düzeyine ulaşmanın bir yolu var mı?

+0

SQL Server'ın yanıtının doğru olduğunu düşünüyorum. –

+0

Bunu kabul ettiğim için mutluyum. Sorun şu ki, uyguladığım hesaplama C# stili sonucunu gerektiriyor. – fyodorfranz

+0

C# cinsinden veri tipiniz nedir? Float tip C# kullanıyorsanız, bu doğru değildir. her zaman ondalık kullanın. BTW, ifadenizde herhangi bir bölünme (/) yoktur, bu yüzden 6.149999999'un neden doğru olduğunu düşünüyorsunuz ?! – FLICKER

cevap

0

bunu yapabilirsiniz X sütundur ve y hassas olan bir

CAST(X AS DECIMAL(y,s)) 

. 38, kullanabileceğiniz maksimum ayardır. s ondalık noktasının sağındaki değerlerin sayısıdır.

https://msdn.microsoft.com/en-us/library/ms187746(v=sql.120).aspx

+0

Öneriniz için teşekkürler. Aradığım sonucu almak için bunu nasıl kullanabilirim biliyor musunuz? Her bireysel değişkeni bir ondalığa dönüştürmeyi denedim ve çalışmadı. Daha basit bir yaklaşım olan 'DÖKÜM SEÇİMİ (((6.4 + (10 - 6.4) * 0.5) * 0.75) AS DECIMAL (38, 37)) – fyodorfranz

+0

Atm'ı test edemiyorum, ancak ikinci parametreyi ondalık noktasının sağındaki değerlerin sayısını tanımlayan cevabım. İlk değeri istediğiniz bir miktar değeriyle yapmaya çalışabilir misiniz? Sanırım bu tüm ifadeyi ondalık bir hale getirmelidir. – timcbaoth

+0

İkinci formülü eklenmiş tüm formülü ("DECIMAL (38,37)" ile çalıştırmayı denedim. "İlk değeri atmayı deneyebilir misin" derken, sadece 6.4? – fyodorfranz