Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 20 kwi 2024, o 08:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 11 sty 2018, o 14:19 
Offline
Użytkownik

Dołączył(a): 03 lut 2016
Posty: 126
Pomógł: 0

W wyniku pewnych obliczę otrzymuję liczbę typu float, powiedzmy że 12.01. Na podstawie innych danych w wyniku otrzymuję wynik 5.7, a jeszcze innym razem powiedzmy 10.07. Chciał bym żeby wyniki obliczeń zostały zaokrąglane w górę lub w dół, np. odpowiednio tak: 12.0, 5.5, 10.1. Jak to zrobić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 14:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Może dodaj 0.5 i rzutowanie . (uint8_t)(liczba+0.5) ?

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 14:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Jeżeli chcesz uzyskać po przecinku jedno miejsce,
To pomnóż przez 10 , dodaj 0,5, rzutuj na uint potem float i podziel 10. ?

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 21:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

11jacekj napisał(a):
Chciał bym żeby wyniki obliczeń zostały zaokrąglane w górę lub w dół, np. odpowiednio tak: 12.0, 5.5, 10.1. Jak to zrobić?

12.01 ~= 12.0
5.7 ~= 5.5 <- ?
10.07 ~= 10.1

Na tym przykładzie nie widać jakiego dokładnie rodzaju zaokrąglenie chcesz wykonywać. Czy chodzi o takie najzwyklejsze do wartości elementarnej 0.1 (1 cyfry po przecinku)? A może zaokrąglenie ma być do wartości elementarnej 0.5?

Do zaokrąglania zmiennej float służą funkcje takie jak: round(), ceil(), floor(). Możesz pomnożyć liczbę przez 10, następnie zaokrąglić ją, a potem podzielić przez 10.

Jeżeli piszesz program na mikrokontroler to może warto zrezygnować z przeprowadzania obliczeń na liczbach zmiennoprzecinkowych i działać na zmiennych całkowitych int. Dzięki temu byłoby mniejsze zużycie czasu i pamięci procesora.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 22:16 
Offline
Użytkownik

Dołączył(a): 03 lut 2016
Posty: 126
Pomógł: 0

Chodzi mi o dokładność 0.1. Jestem na etapie początku nauki C. Do sprawdzenia jak działają niektóre rzeczy używam kompilatora na PC, dlatego czas operacji i użycie pamięci nie jest w tym momencie dla mnie priorytetem, a nawet nie biorę takich rzeczy pod uwagę. Niemniej jednak każda uwaga jest mile widziana i mam nadzieje że utkwi mi w pamięci na długo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 14 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO