Wiktor2019 Napisano Grudzień 15, 2020 Udostępnij Napisano Grudzień 15, 2020 (edytowany) Mam moduł BME280 i wyświetla mi wilgotność oraz ciśnienie z dokładnością do czwartego miejsca po przecinku. Nie wiem jak zrobić żeby wyświetlał mi z dokładnością do drugiego miejsca po przecinku (nie chodzi mi o wyświetlenie na LCD czy serial tylko te dane są wysyłane na serwer Thingspeak i potrzebuje w programie zaokrąglić te dane do drugiego miejsca po przecinku). Poniżej jak wygląda odczyt BME280. float temp(NAN), hum(NAN), pres(NAN); BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); BME280::PresUnit presUnit(BME280::PresUnit_hPa); bme.read(pres, temp, hum, tempUnit, presUnit); Edytowano Grudzień 16, 2020 przez Wiktor2019
Marooned Grudzień 16, 2020 Udostępnij Grudzień 16, 2020 Pytanie czy chcesz nadal dane mieć jako float czy jako string? Bo jeśli jako float, to można próbować zaokrąglać, ale trzeba pamiętać, że float jest zawsze pewnym przybliżeniem. Np. nie da się zapisać dziesiętnego 0,1 jako skończonej wartości binarnej. Dlatego pisząc, że chciałbyś mieć "do drugiego miejsca po przecinku" sugeruje, że chciałbyś zamienić float na jego tekstową reprezentację w formacie xxx,yy. Od tej odpowiedzi zależy dalsza część tego wątku. Pomijam, że na obie odpowiedzi w necie jest 10 tysięcy wątków 1
Wiktor2019 Grudzień 16, 2020 Autor tematu Udostępnij Grudzień 16, 2020 45 minut temu, Marooned napisał: Pomijam, że na obie odpowiedzi w necie jest 10 tysięcy wątków Niestety nie znalazłem interesującej mnie odpowiedzi na moje pytanie (może źle szukałem). Chcę zmienić liczbę np. float wilgotnosc; wilgotnosc = 85,4852; na liczbę wilgonosc = 85,48
Popularny post Marooned Grudzień 16, 2020 Popularny post Udostępnij Grudzień 16, 2020 Czyli chcesz zachować zmienną jako wartość liczbową. To się może nie udać z powodów opisanych w moim pierwszym poście. Zobacz: #include <math.h> float f = 123.45678; float r = round(f * 100 + 0.5) / 100.0; printf("f: %f, r: %f", f, r); teoretycznie wygląda na poprawny kod, ale z powodu sposobu zapisu ułamków w binarnym świecie mamy: f: 123.456779, r: 123.459999 Dlatego skoro i tak wysyłasz gdzieś te dane, to być może chcesz je mieć w formie tekstowej, wtedy masz większe pole manewru: float f = 123.45678; float r = round(f * 100 + .5) / 100.0; char s[10]; //odpowiednio duży bufor w zależności od wielkości f sprintf(s, "%.2f", f); printf("f: %f, r: %f, s: %s", f, r, s); da: f: 123.456779, r: 123.459999, s: 123.46 I obstawiam, że takiego "s" się spodziewasz. 3
Wiktor2019 Grudzień 16, 2020 Autor tematu Udostępnij Grudzień 16, 2020 Dzięki za odpowiedz już wszystko działa tak jak chciałem.
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »