• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
liczby z przecinkiem
#1
Witam wszystkich
Mam taki problem
wycinek kodu....;

float ml;
float mlx;

mlx=(50/60);
ml=(ml + mlx);
Serial.println(ml);

Mimo tego że jest zadeklarowana zmienna double zwraca mi 0
jak podstawię
mlx=(60/60);
zwraca 1 a jak
mlx=(100/60);
to też jeden
Czemu nie liczy dziesiętnych czy setnych części po przecinku...
Proszę o pomoc...
 
Odpowiedź
#2
Witam,
Powinno być 50.0 / 60.0
Pozdrawiam
 
Odpowiedź
#3
dzięki wielkie...
no tak... Rolleyes
 
Odpowiedź
#4
Kurczę... mam następny schodek
Wynik "ml" jest prawidłowy i wyświetla go poprawnie ale nie mogę użyć tej informacji w dalszym kodzie
Kompilator nie bierze tej zmiennej pod uwagę
np
if(ml==500.0 && x=1);
{Blynk.notify("500 ml");}
 
Odpowiedź
#5
Liczb zmiennoprzecinkowych nie porównuje się przez "==" bo wiele wartosci nie istnieje, np nie ma 0.7 jest tylko przybliżenie np 0.6999999 albo 0.7000001.
Jakiego arduino używasz? Na avr nie ma typu double i działają wolno.
Dlaczego musi być typ zmiennoprzecinkowy?
Kod z delay to nie kod, to DEMO!
Możliwości sprzętowe uC trzeba wykorzystywać a nie /machać/. GPIO!
Jestem a usilnie chcę być amatorem to dwie różne rzeczy.

http://er-mik.prv.pl/projekty edw.php 
http://er-mik.prv.pl/projekty_avt.php
 
Odpowiedź
#6
Mam nodemcu
Mam pompę którą zmieniam wydajność od 0 do 100ml/min
Chciałbym żeby niezależnie jaka jest wydajność policzyło mi ilość przepompowanej cieczy
mlx=wydajność/60 sekund
I w pętli co sekundę 
ml=ml+mlx
 
Odpowiedź
#7
Masz aż dwa błędy w jednej linii:

if(ml==500.0 && x=1);

Po pierwsze x=1, a powinno być x==1, po drugie średnik na końcu - więc nawet jeśli warunek jest spełniony to nic się nie dzieje, a blok instrukcji po if jest wykonywany.
 
Odpowiedź
#8
(12-02-2020, 12:32)zojsan napisał(a): Mam nodemcu
Mam pompę którą zmieniam wydajność od 0 do 100ml/min
Chciałbym żeby niezależnie jaka jest wydajność policzyło mi ilość przepompowanej cieczy
mlx=wydajność/60 sekund
I w pętli co sekundę 
ml=ml+mlx
Nie wystarczy rozdzielczość jaką oferuje arytmetyka stałoprzecinkowa?
Kod z delay to nie kod, to DEMO!
Możliwości sprzętowe uC trzeba wykorzystywać a nie /machać/. GPIO!
Jestem a usilnie chcę być amatorem to dwie różne rzeczy.

http://er-mik.prv.pl/projekty edw.php 
http://er-mik.prv.pl/projekty_avt.php
 
Odpowiedź
#9
(12-02-2020, 12:39)to był średnik....  Dzięki Elvis


MERASerwis napisał(a):
Nie wystarczy rozdzielczość jaką oferuje arytmetyka stałoprzecinkowa?
nie rozumiem...
 
Odpowiedź
#10
(12-02-2020, 13:03)zojsan napisał(a):
(12-02-2020, 12:39)to był średnik....  Dzięki Elvis MERASerwis napisał(a): Nie wystarczy rozdzielczość jaką oferuje arytmetyka stałoprzecinkowa?
nie rozumiem...
Jakiego zakresu liczb potrzebujesz? Musi być aż:
2,2E-308 ÷ 1,8E+308 (dokładność 15 cyfr) ?
Nie wystarczy 0 ÷ 4294967295 ?
Kod z delay to nie kod, to DEMO!
Możliwości sprzętowe uC trzeba wykorzystywać a nie /machać/. GPIO!
Jestem a usilnie chcę być amatorem to dwie różne rzeczy.

http://er-mik.prv.pl/projekty edw.php 
http://er-mik.prv.pl/projekty_avt.php
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości