Soran
sql sorgu yazarken virgüllü sayıların toplamında hata veriyor (Sebebini bilen varmı?)

Genel Tartışma
-
sql sorguda select sum(ad) from tabloadi vs gibi bir sorgu yazdığım zaman eğer topladığı sayılar içerisinde virgülden sonraki kısmı 6,7 gibi olan sayıların toplamını **,300000000247468 gibi absürt bi şekilde veriyor. Sayı tipleriyle oynasamda yine sorunu çözemedim. Yuvarlama işlemi yapıpda sorunu görmezden gelmek istemiyorum. Acaba problemin kaynağını bilen varmı. Cevaplarınız için şimdiden teşekkürler.
- Değiştirilmiş Tür Kyamuran SalibryamMicrosoft contingent staff, Moderator 25 Temmuz 2016 Pazartesi 08:40
Tüm Yanıtlar
-
-
-
-
-
Merhabalar,
decimal(p,s) şeklinde tanımlama veya dönüşüm gerçekleştirmeyi dener misiniz? p kısmı precision olup sayının toplam kaç basamaklı tutulabileceğini belirtirken, s kısmı scale yani virgülden sonraki ondalıklı kısmın kaç haneli duyarlıklı olacağını belirler. Sizin örneğinizde eğer ondalıklı kısmın duyarlılığı 1 hane olacaksa decimal(18,1) gibi bir tanımlama kullanabilirsiniz. Duyarlılık artsın istiyorsanız s kısmını değiştirerek istenilen duyarlıkta sayıları tutabilirsiniz.
Umarım faydalı olur...
Please Mark This As Answer if it solved your issue
Please Vote This As Helpful if it helps to solve your issue
www.abdullahaltintas.com -
Merhaba
Öncelikle float alanlar aslında sayıları sizin yaptığınız gibi 3.7 olarak tutmazlar bunun sebebini net olarak söylemem mümkün değil sayının boş alanına çeşitli ondalıklar atarlar. Her ne ise eğer sum(ad) şeklinde bir şey yapacaksanız öncelikle sum(convert(money, ad)) işlemini yapmalısınız. yada convert işlemini decimal(10,2) gibi bir şekilde öncelikle convert etmeniz mantıklı olacaktır. Convert işlemi işe yaramadığını düşünürseniz matematiksel virgül sonrasını yuvarlama olan floor, ceiling vs işlemlerinden faydalanabilirsiniz. https://msdn.microsoft.com/en-us/library/ms177516.aspx bu linkten matematiksel işlemleri bulmanız mümkün.
-
-
Merhaba
Öncelikle float alanlar aslında sayıları sizin yaptığınız gibi 3.7 olarak tutmazlar bunun sebebini net olarak söylemem mümkün değil sayının boş alanına çeşitli ondalıklar atarlar.
Kafasına göre ondalık atmıyor tabiki :). double, float, single... Bunların adları neden böyle diye düşünmek gerekli. Hepsi floating point kavramı ile alakalı olarak böyle oluyor.
İşin geyik kısmı, buradan sonrasını atlayabilirsin :
Floating point sayılarda 0 dan uzaklaştıkça hassasiyet azalır. Yani 0 a görece yakın bir yerde iki sayı arasındaki fark 0.00001 iken 0 dan uzaklaştıkça 0.01 olacaktır. Bu sebeble her sayıyı olduğu gibi saklamak mümkün olmayacaktır. Yine bu sayılar, bir tam sayı ve kuvvet değerini ve ondalığın nereden başlayacağını tutarlar (negatif üsler ondalıklı sonuç verir). Yani sayının kendisinden çok o sayıyı elde edecek matematiksel işlemi barındırırlar.
Kayar nokta matematiğini burada anlatmak abes olacağından merak edenler araştırsın. O zaman mantissa , exponent vs. nedir diye yuttuğunuzda o yukarıdaki gibi sayılar absürt olmak yerine bilimsel olacaktır.
-
-