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
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.
#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.
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ı.
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;
}
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.
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.
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.
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.
Ekranda yazdırmak içinse printf zaten yuvarlıyor.
printf("%.2f", 3.12656) --> 3.13
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.
Her şeyi 100 ile çarpıp int olarak
işlem yapın. Ekran işlemi varsa
virgüllü yazdırırsınız.
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
"int" içerisinde işlem yaparsınız. Siz
virgülden sonra iki hande lazım dediniz.
Alta ya da üste yuvarlamak sizin elinizde.