Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Javada bir sayının ondalıklı biçimi ile tamsayı biçimi nasıl ayrılabilir?

Konu, 'Java / JSP / JSF' kısmında jamesbont tarafından paylaşıldı.

  1. jamesbont

    jamesbont Üye

    Kayıt:
    26 Haziran 2008
    Mesajlar:
    26
    Beğenilen Mesajlar:
    0
    Javada bir sayının ondalıklı biçimini algoritma ile bulurken en kısa yol nasıl olabilir??
    Misal 1000.2 de olabilir sayı. Saynın bir kısıtlaması yok.
    ben kalanın 1 den küçük olduğu zamana kadar bir if else döngüsü düşündüm ama bana biras uzun geldi. For ve if döngüsü iç içe olacakmı gibi geliyor kafam allak bullak oldu...
    Fikirleri olan arkadaşlar paylaşırsa sevinirim...
     
  2. printf

    printf Daimi Üye

    Kayıt:
    9 Ağustos 2008
    Mesajlar:
    2,095
    Beğenilen Mesajlar:
    0
    Meslek:
    Mühendis Adayı , okuyor
    Şehir:
    Ankara||Istanbul
    Kod:
    double kesirliSayi = 5.6234;
    
    System.out.println(kesirliSayi - Math.abs(kesirliSayi)); // Kesirli sayidan tam sayiyi cikarip kesiri bulur.
    System.out.println(Math.abs(kesirliSayi)); // Bu da tam sayinin kendisi
    
     
  3. jamesbont

    jamesbont Üye

    Kayıt:
    26 Haziran 2008
    Mesajlar:
    26
    Beğenilen Mesajlar:
    0
    Sağolasın... Benim u kütüphanelerin içeriklerini öğrenmem lazım. Yoksa sıfırdan yazacaktım :)
    Birde böyle bir sonuç verdi. Sebebi ne olabilir.
    0.0
    5.6234
     
  4. Panthera Tigris

    Panthera Tigris Daimi Üye

    Kayıt:
    2 Ekim 2009
    Mesajlar:
    658
    Beğenilen Mesajlar:
    0
    modf yok mu Java'da :D?
     
  5. jamesbont

    jamesbont Üye

    Kayıt:
    26 Haziran 2008
    Mesajlar:
    26
    Beğenilen Mesajlar:
    0
    modf nasıl kullanıyorsunuz??
     
  6. Dualwarior

    Dualwarior Üye

    Kayıt:
    7 Kasım 2009
    Mesajlar:
    236
    Beğenilen Mesajlar:
    0
    Meslek:
    Öğrenci
    Şehir:
    Kırşehir
    floor olması lazım abs mutlak değer buluyordu

    float ya da double olan sayı stringe çevrilip . işaretine görse parse edilebilir.
     
  7. printf

    printf Daimi Üye

    Kayıt:
    9 Ağustos 2008
    Mesajlar:
    2,095
    Beğenilen Mesajlar:
    0
    Meslek:
    Mühendis Adayı , okuyor
    Şehir:
    Ankara||Istanbul
    o hatanin sebebini tam bilemiyorum ama genel mantik yazdigim gibi, islemi double icine alip cast etmek gerekiyordur belki de.
     
  8. jamesbont

    jamesbont Üye

    Kayıt:
    26 Haziran 2008
    Mesajlar:
    26
    Beğenilen Mesajlar:
    0
    Kod:
    import java.util.Scanner;
    public class sayilariayir {
       public static void main(String[] args){
    
           double sayi,tamtarafi;
            Scanner klavye=new Scanner(System.in);
            System.out.print("Lütfen sayınızı giriniz ");
            sayi=klavye.nextDouble();
            tamtarafi=Math.round(sayi);
            System.out.println(tamtarafi);
            System.out.println(sayi-tamtarafi);
            
            
          
        }
    }
    
    Sonuç bu çıkıyor ben kendime göre algoritmayı düzenledim. Ama u küsüratlar neden oluşuyor çözemedim...??

    Sonuç
    Lütfen sayınızı giriniz 10,3
    10.0
    0.3000000000000007
     
  9. Panthera Tigris

    Panthera Tigris Daimi Üye

    Kayıt:
    2 Ekim 2009
    Mesajlar:
    658
    Beğenilen Mesajlar:
    0
    @jamesbont
    modf Java'da yok sanırım, bilmediğim için sordum, C'de bir sayının tam kısmını ve ondalıklı kısmını ayrı olarak almaya yarıyor.

    0.3000000000000007 yazdırması normal, double çok hassas (Bazen hassasiyeti yeterli bile gelmiyor ancak bu durumda çok hassas). Mesela ilk altı basamağı falan yazdır.

    Not: Bence round yerine floor kullanmalısın, çünkü round sayıyı kendinden büyük bir sayıya da yuvarlayabilir, ancak floor 15.9999 gibi bir değer bile olsa kesinlikle aşağı yuvarlar.
     
  10. yoda

    yoda Yeni Üye

    Kayıt:
    20 Haziran 2011
    Mesajlar:
    3
    Beğenilen Mesajlar:
    0
    DecimalFormat classsını kullanabilirsin.
     
  11. fyodor

    fyodor Aktif Üye

    Kayıt:
    3 Ekim 2010
    Mesajlar:
    384
    Beğenilen Mesajlar:
    0
    Meslek:
    Bilgisayar Mühendisliği(öğrenci)
    Kod:
    import java.util.Scanner;
    public class deneme {
        public static void main(String[] args) {
    	double a = 5.46;
    	int tamKisim = (int) a;
    	/*
    	 * tam kısmı int değil de double istersen
    	 * double tamKisim = Math.floor(a);
    	 */
    	
    	String sayi = String.format("%f", a - (int)a);
    	double ondalikKisim = new Scanner(sayi).nextDouble();
    	
        }
    }
    
    bu işine yarar heralde.
    Ayrıca sana tavsiyem java api documantation u indirip bir klasöre açman(jdk nın kurulu olduğu klasörü öneririm) ve /api/index.html dosyasını açıp tarayıcının yerimlerine eklemendir. Burda
    http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-doc-download-355137.html
     
  12. jamesbont

    jamesbont Üye

    Kayıt:
    26 Haziran 2008
    Mesajlar:
    26
    Beğenilen Mesajlar:
    0
    @fyodor verdiğin döküman oldukça güzelmi. Teşekkürler... Diğer yardım eden arkadalarada teekkürler
     
  13. borkurt

    borkurt Üye

    Kayıt:
    13 Nisan 2007
    Mesajlar:
    126
    Beğenilen Mesajlar:
    0
    Meslek:
    Yazılım Mühendisi
    Şehir:
    Ankara
    şöylede olabilir
    PHP:
     Double a = new Double(5.46);
      
    Integer x Integer.valueOf(a.toString().substring(a.toString().indexOf(".") + 1));
     
  14. AkA

    AkA Yeni Üye

    Kayıt:
    27 Haziran 2011
    Mesajlar:
    3
    Beğenilen Mesajlar:
    0
    double değeri int olarak tekrar tanıtıp sonucu double olacak şekilde birbirinden çıkarırsan rahatlıkla ulaşabilirsin =)
    classları ezberlemek yerine mantığını ezberlersen daha iyi olur zaten aynı işi yapıyor o da