To może ci wcale float nie jest potrzebne, można użyć fixed point? Ew. jak pisałem - rozbij proces konwersji, tak, że najpierw robisz zaokrąglenie, a potem konwersję. Musi być float, wartości muszą być wyświetlane z różną precyzją (poprzednio podałem tylko przykład dla formatu "0.00"). W jaki sposób zrobić zaokrąglenie, powiedzmy to 2-ch miejsc po...
Jeśli wyrzucisz float to musisz zastosować triki z fixed point math. Czyli część całkowitą uzyskujesz dzieląc np. przez 100, a część ułamkową przeprowadzając operację modulo 100. No i nie możesz dać od razu lcd.print, bo najpierw trzeba sformatować to co chcesz wyświetlić, przygotowując łańcuch funkcją sprintf.
Skoro tak, to OK, I pomogło rozwiązać Twój problem?
Przy zamianie ośmiocyfrowych liczb long do postaci float pojawiają mi się zaokrąglenia na ostatniej pozycji. Czasem o jedną, czasem o kilka jednostek. Na przykład: Zmienna long przed konwersja: 88888889 Zmienna float po konwersji: 88888888.00 Nie dokopałem się do powodów takiego stanu rzeczy. Jakieś pomysły jak z tym walczyć?
Mam pewna liczbe typu float np: 2.3453, 2,311 - jak zaokrąglić prosto i szybko do 2 miejsa po przecinku ? Mam na mysli uzywanie zaokrąglonej liczby w programie jako zmiennej, nie wyswietlanie zaokrąglanie przy wyświetlaniu.
Typ Float ma 23-bitową mantysę - w sensie: 23 bity są przeznaczone na mantysę - być może do tego jest 1 bit, który zawsze jest '1' (liczby, oprócz 0, są normalizowane tak, by najstarszy bit mantysy był '1'); liczba 40000001 potrzebuje 26 bitów, żeby zmieścić i najstarszy, i najmłodszy bit, więc przy konwersji na Float najmłodszy bit jest obcinany (a...
tutaj funkcja do zaokrąglania: float Round (float Value, int precision) { // Sprawdzanie, czy liczba jest ujemna bool Sign; if (Value >= 0) Sign = true; else Sign = false; if (!Sign) Value = -Value; // Zaokrąglanie Value *= pow10 (precision); float x = floor (Value); if (0.5 <= (Value-x))...
Spróbuj tego kodu. Nie zapomnij dodać Math w sekcji Uses. procedure TForm1.Button1Click(Sender: TObject); var S: string; R: real; begin S:='12,73863'; R:=StrToFloat(S); //zamiana stringa na float R:=SimpleRoundTo(R,-2); //zaokrąglanie do dwóch miejsc po przecinku end;
Muszę napisać program operujący na zmiennych float . Wiem, że na '51 bedzie to działało bardzo powoli, ale wystarcza mi prędkość rzędu max. 20 przeliczeń na sekundę. Potrzebuję wykorzystać funkce zaokrąglające wyniki do liczby całkowitej. Sprawdziłem w helpie i Keil obsługuje funkcje i floor i ceil . Nie wiem jednak jak szybko one się wykonują na '51....
Jeśli chcesz, żeby zaokrąglał zamiast obcinać to do zmiennej float dodawaj 0,5 i następnie rzutuj.
Jak chcesz zaokraglac do calkowitych to po co ci floaty, a jak chcesz zaokraglac floaty to np %.2e - dwa znaczace znaki po przecinku. Poszukaj sobie dokumentacji do formatowania printfa.
float x = 2.6543210; String tekst = FloatToStrF(x, ffNumber, 7, 2); Label1->Caption = "Wynik = " + tekst; Przy okazji, Refresh jest bezużyteczny chyba, że dalej w kodzie masz zdarzenie OnPaint.
a jak byś dodał taką małą funkcje? nie wiem jak to z mikroprocesorami jak to się ma do wydajności zużycia pamięci itd ale na PC działa pięknie, zaokrągla float do 1 miejsca po przecinku z uwzględnieniem 2 miejsca float zkr(float do_zaokraglenia) //3.1415 { float f_tmp; int i_tmp; i_tmp=do_zaokraglenia*100; //314 if( ((i_tmp%100)%10)...
To wyjaśnia to! Lol, myślałem, że zwariowałem - spojrzałem na kod w zatwierdzeniu 570 i nie mogłem zrozumieć, dlaczego to nie działa. Tak, działa pięknie - tylko jeden mały nit: Wygląda na to, że zaokrągla wartość mired float do liczby całkowitej. Jeśli ustawię zakres jako 153 370,37, nadal pokazuje 2707 jako niską wartość. Nie jest to wielka sprawa...
A obliczony wynik jest bliski rozwiązaniu? Może zmiana liczb jest tak niewielka że albo float zaokrągla je, albo nie wyświetlasz określonej ilości cyfr po przecinku.
Dlatego Ci napisałem - użyj typu stałoprzecinkowego. Albo sobie zaokrąglaj.
Wszystkie obliczenia na liczbach całkowitych. Dla zachowania dużej dokładności proponuję obliczenia na uV. No więc 255 odpowiada 5V, czyli 5000000uV. Stała konwertująca odczyt z przetwornika na uV wynosi więc ((5000000 + (255 / 2)) / 255) - dodanie do dzielnej połowy dzielnika załatwia zaokrąglanie do najbliższej liczby całkowitej. Aby dokonać konwersji...
Liczby zmiennoprzecinkowe też są zaokrąglane.
(...) t szerokosc wysokosc temp display.println(temp); display.println(" "); display.drawRect(123,30, 5, 5, WHITE); // to jest od celsjusza znaku display.setCursor(110,25); display.setFont(); display.display(); Blynk.virtualWrite(V2, temp); //sending to Blynk app delay(5000); } Dziękuję za ponowne dostarczenie pełnego kodu. Wydaje się on poprawny i...
Ostatnio nic z tym nie robiłem, ale jeśli są takie to oznacza że pracuje się na złych typach danych (np. przy rzutowaniu float na short int trzeba zaokrąglać) ewentualnie przekracza się zakres napięcia wyjściowego.
Problem float był wałkowany wielokrotnie na forum. Problem leży w podstawie dwójkowej reprezentacji liczby zmiennoprzecinkowej typu float. Użyj decimal (jeżeli możesz), który ma podstawę dziesiętną lub zaokrąglaj. Kilkanaście sekund szukania w google (przykład akurat w .net, ale dokładnie wyjaśnione): http://gregs-blog.com/2007/12/10/dot-net...
Na 99% masz zadeklarowane to Combo jako wartości Currency (nawet nie wiem jak to jest w Polskiej wersji :/ "Pieniądze"?!?) co automatycznie zaokrągla do 2 miejsc po przecinku. Zmień format danych na "Float" czy co tam masz "zmiennoprzecinkowego" i będzie OK.
Jak będziesz miał zmienną całkowitą to nie będzie zawierała części ułamkowej po podzieleniu przez 1000, musiałby mieć typ float. Zwykle biblioteki mają obsługę podstawowych typów, np. dla oleda będzie to tekst i liczby całkowite, niekoniecznie float. Jak masz int x=1265 ml to możesz zrobić tak, że zaokrąglasz lub ucinasz do wartości x=x/10=126, zwykłe...
Witam. Chyba problem rozwiązany... Szelus mnie zainspirował tą liczbą zmiennoprzecinkową. Zmieniłem deklarację zmiennej su z int na float i program działa już prawidłowo. Prawdopodobnie jak to zauważył Szelus problem był w zaokrąglaniu liczb. Dziękuję za pomoc.
Pomocne było by też ograniczenie/zaokrąglanie wyników do np. 1 miejsca po przecinku - bo dokładność do 6 miejsc po przecinku nie jest taka niezbędna :) https://obrazki.elektroda.pl/7089976900_... Dzięki Mogę bardzo łatwo z poziomu wbudowanego Home Assistant Discovery dopisać wam to: val_tpl {{ float(value)|round(3)...
Na początek spróbuj tego: if (ADC != 0) ICR1 = roundf(1000.0 / (float)(ADC)); else ICR1 = 65535; Zaokrągla się na przykład tak jak widać. No i używa się kropki. Niezależnie od środowiska.
Dzięki za tak ekspresową odpowiedź. Jeszcze takie jedno pytanie: Czy jest taka funkcja, która zaokrągla do 0,01? Nie. A to problem napisać taką? Od razu podpowiem o float raczej zapomnij.
Czy da się zwiększyć dokładność obliczeń ? T1= 25,5 stC T2 = 24 stC T1-T2 = 1,5 stC a na LCD wyświetla 1stC wyniki zaokrągla do 1st. Bo chyba gdzieś po drodze zamieniłeś 'float' na 'integer'. e marcus
ok faktycznie, zapomniałem przepraszam. uC taktowany jest 16MHz, częstotliwość podniesiona do 32 mHz jest to ATxmega8 E5 Bez kasowania flagi przerwania nie wychodzi z niego. Czytałem o tym na jakimś zagranicznym forum, ręczne kasowanie flagi pomaga zmienna adc to float. Wrzuciłem do wyświetlenia samą wartość ADCA.CH0RES wpisując jądo zmiennej typu short...
Mam taki problem.Chce do jednej zmiennej typu double przypisać dzielenie drugiej zmiennej typu int przez 100.Oto przykładowy kod: int liczba1; float liczba2; liczba2=liczba1/100 I wynik takiego dzielenia jest zaokrąglany do całości,a mi są potrzebne też liczby po przecinku. Jak to rozwiązać?
Zrobiłem tak:wynik np 13.44(typ float) przekształcam na typu int co daje 13. teraz na wyświetlaczu led wyświetlam 13 (korzystam z funkcji moduło) następnie odejmuje od float int czyli 13.44-13=0.44. i za pomocą prostych funkcji if które zaokrąglając dane wyświetlam je na wyświetlaczu
napisz sobie... coś w stylu: int zaokr(int co, int do_ilu) { return (do_ilu*ceil((float)co/&... } (nie przetestowałem - pisałem z głowy czyli z niczego;))[/code]
No i po to ten wątek założyłem - żeby się pozbyć tego zakłócenia. Zastanawiam się nad wersją opartą na floatach. Wtedy nadal trzeba by stosować to równanie, a X0 i X1 jakoś zaokrąglać w dół czy w górę? Na pewno odpadnie współczynnik skalujący S, a dX będzie miał wartości np. 57.3261.
Hej. Mam problem. Na początek powiem, że używam FreeRTOS (choć wydaje mi się, że to bez związku). Mam taki kod: [syntax=c]przecinek=(float)licz/100; zmienna=(int)(round(przecinek)); if(zmienna >= 4 ) { fifo[i]=(int)round(przecinek); i+=1; }[/syntax] Działanie: zapisuję do "przecinek" liczbę zmiennoprzecinkową. "zmienna" powstała tylko w celu podejrzenia...
no i działa mistrzu :) mam to teraz tak: [syntax=php] $xml = simplexml_load_file('C:\serwer\1_Wire_Lo... function GetRoomTemperature($id) { $result = $GLOBALS['xml']->xpath("/DATA/TEMPERA... return $result[0] ; } $temp_01 = round( (float )GetRoomTemperature("4F000005A2B8CF28"), 1); $temp_02 = round(...
Potrzebuję wyświetlić po przeliczeniu na wyświetlaczu LCD (klasyczny 20x2) liczbę np. 20 000 000 000 - bez spacji. Chory temat, ale muszę się dostosować do wymagań promotora... Próbowałem sprintf() ale wiadomo co robi z pamięcią procka. Docelowo użyłem dtostrf(), ale dziwnie działa tzn. właściwą wartość 8 002 930 403, pokazuje jako 8 002 930 200. Jakoś...
Za bardzo się wczytałem w komentarze a za mało w oryginalny post... musi odcinać a nie zaokrąglać końcówkę i na początku jeśli wynik jest mniejszy noż 100 000 to musi dodawać zera czyli 6 cyfr Nie ma tam nic o sytuacji kiedy wynik jest dłuższy niż 6 cyfr, jest za to wyraźnie napisane, że ma obcinać ułamek, a nie go zaokrąglać, czyli jak najbardziej...
Nie istnieje (przynajmniej w większości znanych mi kompilatorów) porównanie trójargumentowe! Należy rozbić każdą z nierówności na dwa porównania. Tak w ogóle to działa przepisanie float do int? Bo wg mnie powinno się użyć funkcji zaokrąglających. Dalej nie wiem, na jaki to procesor, bo jestem sceptyczny co do takiego rozwiązania - a ściślej jego wydajności...
Dr.Vee : Ten link który podałeś jest "trochę" obszerny, ale zapewne wyczerpujący. Jakbym to przeczytał i pojął to zapewne zrobiłbym doktorat i nazywał się Dr. Kaktus. :) O tym że float może się mylić to znaczy że zaokrągla sobie ułamki i czasem może to być przyczyną błędnego wyniku zdawałem sobie sprawę od dawna, ale mimo że przeczytałem kilka książek...
Akurat nie będzie to miało znaczenia dopóki obie wartości, zadana i mierzona, będą takie same;) Sprawdź sobie algorytm w symulatorze czy w ogóle się sprawdza. Sprawdź czy masz dobre typy zmiennych, uchyb musisz mieć najlepiej float. Jak potem wymnażasz to kiedyś koniec końców musisz zamienić typ na inta, sprawdź czy dobrze zaokrąglasz liczby. Sprawdź...
Jeśli jest jakiś problem z sprintf to zazwyczaj na AVR odpowiada za to okrojona domyślnie wersja tej funkcji. Dołącz libprintf (poprawnie to konfigurując i powiedz czy problem zniknął. Szczerze powiedziawszy, to nie wiem jak mam dołączyć to libprintf. Widzę, że dwa takie pliki są w C:\WinAVR-2010010\abr\lib, a konkretnie to libprintf_min.a i libprintf_fit.a,...
Fajny podprogram, myślę, że warto takie rzeczy czasem przypominać, gdy wszyscy widzą tylko ARM, floaty, itd. Dobrze wykorzystuje możliwości procesora w celu skrócenia kodu. Niestety jest kilka niedoróbek. 1. Dziwne (niestandardowe) zaokrąglanie wyniku. Tzn. wartość poprawna dla kwadratów, dla pozostałych - zaokrąglenie w górę. 2. Powoduje to błędny...
11.0592 to nie jest liczba całkowita :) int w czasie obliczeń jest zaokrąglany do liczb całkowitych i tu masz odpowiedź :) float Słowa kluczowego oznacza typu prostego, który przechowuje wartości zmiennoprzecinkowych 32-bitowych. int Słowa kluczowego oznacza typem całkowitym [url=http://msdn.microsoft.com/pl-pl/lib... w C# Na przykład...
Naprowadzało, ale tam mój kolega zrobił błąd w kodzie po nie zaprogramował pinów na diody Tam jest 'cała kupa' błędów, albo cały kod jest (o)błędny! Autor był chyba płacony 'akordowo'; od linijki kodu (?!) Czy te diody LED mają pracować jako 'bar-graf' zależny od zmiennej 'średnia' (sredniej wartości analogowej odczytów na pinie2), czy zamiarem jest...
Witam. Zacząłem się uczyć języka C. Mam prosty program do przeliczania temperatur (wiem że można było to zrobić prościej ale lecę z książką i wykonuje ćwiczenia pod każdym rozdziałem). [syntax=c]main(){ int i; printf("%temp celsjusza\t %temp fahr\n\n"); for (i=0; i<100; i=i+5) printf("%d %2.1f\n",i, obliczanie_temp(i)); return 0; } obliczanie_temp(int...
Używałem zamaist funkcji round funkcję floor i tez działa Proszę o wybaczenie, ale to się koledze tylko wydaje, że działa. NIE MOŻNA ZAOKRĄGLAĆ !!! Poza tym, chyba ten kod nie jest do końca poprawny. Wszystko zależy od danych wejściowych, ale jeżeli założymy, że dane są podane w formacie obowiązującym w NMEA, czyli (s)ssmm.mmmm jako liczba zmiennoprzecinkowa....
dht.getTemperature() zwraca wartość float - nie wiem, jakiej konkretnie biblioteki używasz do DHT, ale zwykle tak jest. Jeżeli przypiszesz tę wartość do zmiennej int, to jest obcinana część ułamkowa, więc np. 21.99 staje się 21, a 22.01 to będzie już 22. Jeżeli zależy Ci na progach temperatury wyrażonych "po przecinku", to zmienna 'temperatura' musi...
jak mam podzielić nie używając float?? skoro mam wynik który muszę podzielić na rozdzielczość?? (2^24) zakres napięcia wynosi 0 -2,5V. Pomyśl sobie - masz np rozdzielczość 10-bit czyli 1024 czyli 2,5V / 1024 daje ci 0,002441406V na jeden krok ;) wyobraź sobie ile tracisz na zaokrąglaniu pracując na liczbach typu float. A czym się to będzie różniło...
zmieniłem wynik z milisekund na sekundy poprzez elapsedTIme = (millis() - startTime)/1000, jednakże "elapsedTime" nie wyświetla wyniku po przecinku a zaokrągla liczby. Jak sprawić by zmienna elapsedTIme wyświetlała liczby niecałkowite? Wstępna ocena dostępnych informacji Analiza podanych przez użytkownika danych: - Użytkownik zmienił wynik pomiaru...
Sam sung: tak miales racje ale bylem szybszy od ciebie. Tego nie wiesz, wcześniej nie znaczy szybciej :p Rozwiazanie tak samo jak problem jest banalne. float fEy = 34.55; int iValue1 = ( int )fEy; int iValue2 = ( int )ceil( ( fEy - iValue1 ) * 100.0f ); Tyle, że nie jest to rozwiązanie problemu - błędy zaokrąglenia w...
zaokrąglanie liczby bascom zaokrąglanie single zaokrąglanie
access point edimax konfiguracja noże tnące schemat zdalnego sterowania
GECO G-406-P08 AL5 – usuwanie alarmu 5 czujnika S2, naprawa NTC, reset sterownika Pozycja klapy V70 – diagnostyka, adaptacja i typowe usterki w Climatronic VAG (Golf IV, Passat B5/B6, Audi A4)