Zaokroževanje decimalnih števil

Moderator: tilz0R

Zaokroževanje decimalnih števil

OdgovorNapisal/-a arksi » 20 Jan 2016, 17:25

Zanima me, ali obstaja v C-ju kakšna funkcija ali ukaz, ki zaokroži decimalno število.
Npr:
Število 15.12345 bi rad zaokrožil na eno decimalko 15.1. Kako to najenostavneje storim.

LP
arksi
 
Prispevkov: 945
Pridružen: 21 Jan 2015, 08:01
Kraj: Dolenjska
Zahvalil se je: 1816 krat
Prejel zahvalo: 167 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 19

Re: Zaokroževanje decimalnih števil

OdgovorNapisal/-a RUros » 20 Jan 2016, 17:32

Obstaja: floor() za navzdol in ceil() za navzgor. V tvojem primeru bi moral pomnožiti z deset in zaokrožit, ker zaokroži na najbližje celo število.
RUros
 
Prispevkov: 456
Pridružen: 17 Jan 2015, 23:52
Kraj: Moravče
Zahvalil se je: 79 krat
Prejel zahvalo: 61 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 14

Re: Zaokroževanje decimalnih števil

OdgovorNapisal/-a arksi » 20 Jan 2016, 17:39

Lahko malo za nas "zelence" bolj konkretno razložiš kako uporabiti funkcijo floor() ali ceil().?

Torej število 15.12345 bi rad "odrezal" na eno decimalno mesto >> 15.1.
arksi
 
Prispevkov: 945
Pridružen: 21 Jan 2015, 08:01
Kraj: Dolenjska
Zahvalil se je: 1816 krat
Prejel zahvalo: 167 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 19

Re: Zaokroževanje decimalnih števil

OdgovorNapisal/-a jure94 » 20 Jan 2016, 18:47

http://www.cplusplus.com/reference/cmath/round/
Resno pa priporočam, da se za kakršnokoli programiranje naučiš uporabljati google, ker sam hitreje dobiš odgovore kot pa da čakaš na nekoga, da prebere vprašanje in odpiše.
Torej funkciji podaš tvoje število, ki ga množiš z 10, vrne ti pa zaokroženo število, ki ga moraš deliti z 10.

Edit:
Brez knjižnic gre pa tudi tako lahko:
Koda: Izberi vse
  float x; //tvoje število
  int a;
 
  a = x*100;

  if( a%10 >= 5){
      x = (x*10)+1;
      x = (int)x;
      x = x/10;
  }
  else{
    x = (x*10);
    x = (int)x;
    x = x/10;
  }
Uporabniški avatar
jure94
 
Prispevkov: 990
Pridružen: 18 Jan 2015, 01:33
Kraj: Ljubljana
Zahvalil se je: 49 krat
Prejel zahvalo: 116 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 11

Re: Zaokroževanje decimalnih števil

OdgovorNapisal/-a RUros » 20 Jan 2016, 20:12

funkcija floor() in ceil() delujeta tako, da jima kot parameter daš decimalno število, funckija pa vrne zaokrožen rezultat
Koda: Izberi vse
int return_value;
float input_value=45.12;

return_value=floor(input_value);
//v tem primeru dobimo return_value=45

return_value=ceil(input_value)
//v tem primeru dobimo return_value=46


Za uporabo obeh funkcij v tvojem primeru moraš še vedno izbrati primerno funkcijo, če je decimalno manjše od 5 (floor) ali večje oz. enako (ceil).
RUros
 
Prispevkov: 456
Pridružen: 17 Jan 2015, 23:52
Kraj: Moravče
Zahvalil se je: 79 krat
Prejel zahvalo: 61 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 14

Re: Zaokroževanje decimalnih števil

OdgovorNapisal/-a Highlag » 20 Jan 2016, 23:34

Ponavadi zaokrožujemo ob izpisu. Zakaj torej ne uporabiš format stringov printf funkcije?
V tem smislu:
Koda: Izberi vse
printf("Color %s, number1 %d, number2 %05d, hex %#x, float %5.2f, unsigned value %u.\n",
        "red", 123456, 89, 255, 3.14159, 250);


Na internetu je polno primerov kako to početi.
http://31.15.144.68/
Highlag
 
Prispevkov: 543
Pridružen: 19 Jan 2015, 18:22
Zahvalil se je: 2 krat
Prejel zahvalo: 107 krat
Uporabnika povabil: borisz
Število neizkoriščenih povabil: 13

Re: Zaokroževanje decimalnih števil

OdgovorNapisal/-a S53DZ » 20 Jan 2016, 23:48

arksi je napisal/-a:Zanima me, ali obstaja v C-ju kakšna funkcija ali ukaz, ki zaokroži decimalno število.
Npr:
Število 15.12345 bi rad zaokrožil na eno decimalko 15.1. Kako to najenostavneje storim.

LP

Včasih smo to delali tako:
floor(x * 10.0 + 0.5) / 10.0;
Uporabniški avatar
S53DZ
 
Prispevkov: 1407
Pridružen: 18 Jan 2015, 10:58
Kraj: Ljubljana
Zahvalil se je: 273 krat
Prejel zahvalo: 468 krat
Uporabnika povabil: S52O
Število neizkoriščenih povabil: 49


Vrni se na C in sorodni jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost