Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: Yuunus - 08 Mart 2021, 09:23:53

Başlık: float sayiyi yuvarlama in C
Gönderen: Yuunus - 08 Mart 2021, 09:23:53
merhaba, 3.12656 gibi bir sayinin ondalik kisminin sadece iki hanesinin yuvarlanmasini istiyorum 3.13 gibi,aradigim round ceil floor gibi bir fonksiyon yukardaki adi gecen fonksiyonlarin hepsi tamsayi kismina yuvarliyor.
derleyici gcc
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: dumansiz - 08 Mart 2021, 11:05:05
float sayi_float;
int sayi_int;
sayi_float*=100;
sayi_int=(int)(sayi_float+0.5);
sayi_float=sayi_int/100;
Kodu denemedim ama bu mantıkla olur diye tahmin ediyorum.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: volkanunal - 08 Mart 2021, 11:14:07

#include<stdio.h>
#include<math.h>

int main () {
   
    double f = 3.12656;

    double int_part;
   
    double fractional = modf(f, &int_part);
   
    fractional = fractional * 100;
   
    fractional = round(fractional);
   
    fractional = fractional / 100;
   
    f = fractional + int_part;
   
    printf("\r\n Last State of f : %lf", f);   
   
    return(0);
}

Böyle bir şey aklıma geldi hocam, ondalık kısmı alıp ayrı şekilde yuvarlamak sonrasında birleştirmek.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: volkanunal - 08 Mart 2021, 11:15:11
Alıntı yapılan: dumansiz - 08 Mart 2021, 11:05:05float sayi_float;
int sayi_int;
sayi_float*=100;
sayi_int=(int)(sayi_float+0.5);
sayi_float=sayi_int/100;
Kodu denemedim ama bu mantıkla olur diye tahmin ediyorum.

Ben bir değer verip denedim hocam, olmadı.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: Yuunus - 08 Mart 2021, 11:21:00
aslinda forumun birinde soyle bir kod var ve calisiyorda lakin yogun bir sekilde float islem yapacagim icin sistemi cok yorar, oda isime gelmiyor
float round(float var)
{
    // we use array of chars to store number
    // as a string.
    char str[40]; 
 
    // Print in string the value of var 
    // with two decimal point
    sprintf(str, "%.2f", var);
 
    // scan string value in var 
    sscanf(str, "%f", &var); 
 
    return var; 
}
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: dumansiz - 08 Mart 2021, 11:24:37
Alıntı yapılan: volkanunal - 08 Mart 2021, 11:15:11Ben bir değer verip denedim hocam, olmadı.
Düzelttim  :) . Son satırda tekrar float tipine dönüştürmeyi unutmuşum.
float sayi_float;
int sayi_int;
sayi_float=3.126;
sayi_float*=100;
sayi_int=(int)(sayi_float+0.5);
sayi_float=((float)sayi_int)/100;
Bu sefer denedim, çalışıyor.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: quarko - 08 Mart 2021, 11:31:15
Sayıyı 1000 le çarpıp integer değişkene at. Sonra 5 ekle. 3131 olarak elde edeceksin. Bu aşamadan sonra ister bu haliyle istersen 1000'e bölüp float olarak kullanabilirsin.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: dumansiz - 08 Mart 2021, 11:35:21
Alıntı yapılan: quarko - 08 Mart 2021, 11:31:15Sayıyı 1000 le çarpıp integer değişkene at. Sonra 5 ekle. 3131 olarak elde edeceksin. Bu aşamadan sonra ister bu haliyle istersen 1000'e bölüp float olarak kullanabilirsin.
1000 e böldüğünde 3.131 olacak.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: quarko - 08 Mart 2021, 12:45:28
Alıntı yapılan: dumansiz - 08 Mart 2021, 11:35:211000 e böldüğünde 3.131 olacak.

Bende farkındayım merak etmeyin. Bu kısımdan sonra bir yerlere yazdırılacaksa ondalık kısmın ilk iki hanesi alınabilir. Yoksa tam sayı halindeyken birlik hanesindeki fazlalık çıkarılabilir.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: brandice5 - 08 Mart 2021, 13:21:07
Ekranda yazdırmak içinse printf zaten yuvarlıyor.

printf("%.2f", 3.12656) --> 3.13
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: Yuunus - 08 Mart 2021, 13:29:43
yok @brandice5 float olarak lazim bana, cok dalavere cevirmeden yapmak istedim, gonderdigim kod bu isi cok iyi yapiyor lakin cok clock harcar, bana hizli birseyler lazim. arkadaslar sagolsun yazdilar ama su an deneme firsatim yok.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: mehmet - 08 Mart 2021, 14:00:51
Her şeyi 100 ile çarpıp int olarak
işlem yapın. Ekran işlemi varsa
virgüllü yazdırırsınız.
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: Yuunus - 08 Mart 2021, 14:25:52
Alıntı yapılan: mehmet - 08 Mart 2021, 14:00:51Her şeyi 100 ile çarpıp int olarak
işlem yapın. Ekran işlemi varsa
virgüllü yazdırırsınız.
carptiktan sonraki kismi ne yapalim truncate ile mi kirpicaz, pardon siz yukardaki float sayiya gore yorumladiniz, virgulden sonra 6 hane var, o kismi unuttum
Başlık: Ynt: float sayiyi yuvarlama in C
Gönderen: mehmet - 09 Mart 2021, 11:08:52
"int" içerisinde işlem yaparsınız. Siz
virgülden sonra iki hande lazım dediniz.
Alta ya da üste yuvarlamak sizin elinizde.