SQL Ondalıklı Sayılar İçin Hangi Data Türü Uygundur?
-
merhaba arkadaşlar. datalar içinde birçok ondalıklı sayı var.
koymada sorun yok fakat üzerinde toplama çıkarma yaptıkça sapıtmaya başladı.
tam bu mesajı yazarken aklıma bir fikir geldi(en son yazacağım)
örneğin 3.2 gibi bir sayıdan 3.2 çıkarınca -0.000000000000354376 gibi bir sayı buldu :D
sonra o sayıyı ekleyim dedim yine saçma bir sayı buldu(daha küçük)
bi daha denedim vesaire derken e üssülere geldi falan.
muhtemelen bu matematikteki FLOAT mantığı ile ilgili bir şey ama hiçbir bilgim yok o yüzden tahribata sorayım dedim
ne yapacağım şimdi ben FLOAT yerine STRING mı yapmalıyım data türünü database'de?
ya da ne yapsam?
aklıma gelen şey de şuydu: toplama çıkarmayı php üzerinde yapsam sonucu database e koysam?
toplama çıkarmaların doğruluğu benim için önemli arkadaşlar en uygun nasıl yapmalıyım? javascript'te de bazı tuhaflıklar vardı bildiğim kadarıyla.....
ek: db=mysql
kofcu tarafından 31/Tem/16 14:22 tarihinde düzenlenmiştir -
Text olarak koyup php tarafında double veya float yapabilirsin.Ama convert kontrollerini iyi yap hata fırlatmasın ekrana
-
Float. Niye baska bisey yapasin ki?
-
@0x656e ben de işlemi php'ye yaptırmayı düşündüm ama, işleme giren değişkenlerden biri database'deki bir değer, yani ekstradan bi select yapmam gerekecek sanırım bunun için.
@angels_demos evet Float olacak orası kesin gibi bir şey ama işlemlerde sıkıntı çıkıyor hocam sorunum orada.
internette float numara türünün bu tür hesaplama hatalarına sahip olduğunu duymuştum. Bunu aşmak için de örneğin 0.2 + 0.1 işlemi yerine (2 / 10) + (1 / 10) işlemi yapabilirsiniz gibi bir çözüm sunulmuş. şimdi bunu deneyeceğim fakat yine 0x656e müride söylediğim gibi diğer değişkeni seçmem gerekiyor. bakalım ne yapacağım artık. aşabilirsem sorunu buradan paylaşacağım...
-
Number_format fonksiyonu ile önce ondalık sistemin ayıraçlarını düzeltmelisin
-
Hocam bu bir hata değil. Float sayı tiplerinin çalışma mantığı budur.
Eğer bu tür sorunları yaşamak istemiyorsan, DECIMAL tarzı veri tipi kullanmalısın.
İşlem yapacağın türü String felan depolamayı düşünüyorsan, programlamayı bırakmalısın bence.
Al sana kaynak: http://stackoverflow.com/questions/2567434/mysql-floating-point-comparison-issues
DrKill tarafından 01/Ağu/16 01:01 tarihinde düzenlenmiştir -
DrKill bunu yazdı
Hocam bu bir hata değil. Float sayı tiplerinin çalışma mantığı budur.
Eğer bu tür sorunları yaşamak istemiyorsan, DECIMAL tarzı veri tipi kullanmalısın.
İşlem yapacağın türü String felan depolamayı düşünüyorsan, programlamayı bırakmalısın bence.
Al sana kaynak: http://stackoverflow.com/questions/2567434/mysql-floating-point-comparison-issues
:D
adam haklı.
-
Data type Access SQLServer Oracle MySQL PostgreSQL boolean Yes/No Bit Byte N/A Boolean integer Number (integer) Int Number Int
IntegerInt
Integerfloat Number (single) Float
RealNumber Float Numeric currency Currency Money N/A N/A Money string (fixed) N/A Char Char Char Char string (variable) Text (<256)
Memo (65k+)Varchar Varchar
Varchar2Varchar Varchar binary object OLE Object Memo Binary (fixed up to 8K)
Varbinary (<8K)
Image (<2GB)Long
RawBlob
TextBinary
Varbinarymerhaba. yazı ve numaralarla ilgili data tipleri bilgim string integer float'dan ibaret olduğu için float ile işlemi yapamıyorsam integer ile yazamayacağımdan en azından string ile yazıp işlemi php ile yapayım gibi şeyler düşünmüştüm de... neyse.
decimal işimi gördü, verilen şu link güzel anlatmış http://stackoverflow.com/questions/2567434/mysql-floating-point-comparison-issues
yardımlar için teşekkür ederim.
-
float virgülden sonra belli bir basamaktan sonra yuvarlar. Bu normalde problem olmayacak kadar küçük bir yuvarlamadır fakat eğer para tutuyorsan yada tuttuğun değerleri çarpıp bölüyorsan sonuçları miğde bulandırır. Atıyorum gelen ve giden para arasında 1 tl fark çıkar sebebini ara ara bulamazsın. Bu tip virgüllü sayılar için decimal değişkeni var. decimal ile tuttuğun veri ile problem yaşamazsın
