Java'da float veri tipi kullanınca hata alıyor

264523

Gigapat
İlk 5 Haneli Mesajınız!
Katılım
14 Haziran 2019
Mesajlar
12.114
Makaleler
4
Çözümler
68
Float: Bu tip virgülden sonra 7 haneye kadar yeterli duyarlılıktadır. (Tek duyarlı — 32 bit)

Java:
float x = 3.14;
System.out.println(x);

Böyle yapınca çalışmıyor fakat double yapınca oluyor. Neden?
 
Yazdığın değer double onu double'dan float'a çevirirken hata veriyordur. Aşağıdaki gibi sonuna f koyarak deneyebilirsin.

float b= 3.6f;


Chapter 3. Lexical Structure

A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double and it can optionally be suffixed with an ASCII letter D or d (§4.2.3).
 
Bu F eklemek Java syntax mı?

Mesela C veya Python'da buna benzer bir dönüşümü yoktu yanlış mı hatırlıyorum?
 
Bu F eklemek Java syntax mı?
Tam emin olmamakla beraber C++'ta da bu tip bir şey olması lazım. Muhtemelen C#'ta da vardır.
C++ için deneyip yazarım.

Ekran Görüntüsü (3302).png

Mesela C veya Python'da buna benzer bir dönüşümü yoktu yanlış mı hatırlıyorum?
C'de konudaki ilk mesajımda paylaştığım şekilde typecasting kullanılıyor. Bu f'li olay varsa da bilmiyorum.
Python'da da biraz farklı şekilde typecasting yapılabiliyor ama Python siz nokta koyduğunuz an onu float ya da double (hangisini yaptığını bilmiyorum) yapıyor.
 
Son düzenleme:
Literal'lere calisman gerek. Dilin spesifikasyonu geregi aksini soylemezsen floating point degeri double olarak kabul eder.

Kod:
double x = 3.14;
System.out.println(x);

Bu sekilde yazarsan hata almazsin.
64 bit degeri 32 bit'e kayipsiz cast edemezsin, literal tanimi geregi float x = 3.14 yazdiginda sol taraftaki 32 bitlik memory bolumune 64 bitlik literali koymaya calisir ve hata alir. 32 bitlik degeri 64 bitlik memory de tutarsin. yani double x = 3.14f ( sol taraf double = sag taraf float )dediginde float literali sorunsuz double'a cast eder. Burada aslinda compiler akilli davraniyor, kodu yazan altta ne oldugunu bilirse.

Arbitrary precision olan dillerde ( Python gibi) numeric degerler runtime'da memory de ne kadar allocate etmesi gerekiyorsa o kadar eder. Yani 32 - 64 gibi sinirlandirmalarin yok. Bu rahatlik verir fakat islem yavasligi saglar.

Memory limitasyonu ciddiyse 32 bit ile reprezente edebilecegin datayi 64 bit ile tutmazsin. Gerektiginde short kullanirsin. Eger Java'da arbitrary precision istiyorsan BigDecimal ve BigInteger class'larini kullanacaksin. Compiled dillerin tumunde bu tarz memory limitasyonlari bulunur, muhendislik bunun uzerinden yuruyor zaten. Memory sonsuz ve bedava degil.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı