[c++] double - banalne pytanie

user: "Andrzej"

jaką funkcja się posłużyć żeby z liczby 45,234 zostało tylko 45,23 (pressision?) prosze o jakiś przykład. z góry dziękuje.

Re: [c++] double - banalne pytanie

user: Konrad Garus

Andrzej wrote: > jaką funkcja się posłużyć żeby z liczby 45,234 zostało tylko 45,23 > (pressision?) MAMY: double d = 45.234; ROBIMY: d = ((int) (d*100)) / 100.0; lub d = (double) ((int) (d*100)) / 100; -- k. konrad dot garus at gazeta dot pl

Re: [c++] double - banalne pytanie

user: "Lukasz"

> ROBIMY: > d = ((int) (d*100)) / 100.0; > lub > d = (double) ((int) (d*100)) / 100; Taaa. I tym sposobem z 45.237 zaokrągli się w dół do 45.23 Już lepszy sposób, to parsowanie przez tekst: sprintf (str,"%.2lf",d); d = atof(str); Jednak wogóle unikaj operowania na floatach i doublach, bo mają błąd zmiennoprzecinkowy. Pewnego pięknego dnia okaże się, że zamiast 45.24 otrzymasz 45.2400000000001 Łukasz Stela

Re: [c++] double - banalne pytanie

user: "Andrzej"

bardzo serdecznie dziękuje

Re: [c++] double - banalne pytanie

user: Mariusz Maslowski

Lukasz wrote: >>ROBIMY: >>d = ((int) (d*100)) / 100.0; >>lub >>d = (double) ((int) (d*100)) / 100; >> >> > >Taaa. I tym sposobem z 45.237 zaokrągli się w dół do 45.23 >Już lepszy sposób, to parsowanie przez tekst: > >sprintf (str,"%.2lf",d); >d = atof(str); > > Łoboże! Od czego funkcja round()? double d = 45.237; double d_2rounded = round(d*100)/100; -- Pozdrawiam serdecznie, Mariusz Maslowski "Czas robi swoje, a Ty, tej?" -- Stary Marych

Re: [c++] double - banalne pytanie

user: Paweł_Kierski

Lukasz w wiadomo=B6ci pisze: > > ROBIMY: > > d =3D ((int) (d*100)) / 100.0; > > lub > > d =3D (double) ((int) (d*100)) / 100; >=20 > Taaa. I tym sposobem z 45.237 zaokr=B1gli si=EA w d=F3=B3 do 45.23 > Ju=BF lepszy spos=F3b, to parsowanie przez tekst: >=20 > sprintf (str,"%.2lf",d); > d =3D atof(str); Raczje mocno pokomplikowany. Mo=BFna przecie=BF: d =3D (double) ((int) ((d*100)+0.5)) / 100; i w ten spos=F3b 45.2349 b=EAdzie zaokr=B1glone do 45.23, a 45.235 - do 45.24 o ile nie b=EAdzie problem=F3w z dok=B3adno=B6ci=B1... > Jednak wog=F3le unikaj operowania na floatach i doublach, bo maj=B1 b=B3= =B1d > zmiennoprzecinkowy. > Pewnego pi=EAknego dnia oka=BFe si=EA, =BFe zamiast 45.24 otrzymasz 45.24= 00000000001 ... albo 45.239999999999. Albo zamiast 45.235 b=EAdzie jednak 45.23499999999 i wtedy zaokr=B1glenie b=EAdzie jednak do 45.23. --=20 Pawe=B3 Kierski pkierski@mks.com.pl dodaj "[nomorespam]" w temacie je=B6li piszesz z domeny innej ni=BF .pl, albo koniecznie chcesz obej=B6=E6 moje filtry 8-)

Re: [c++] double - banalne pytanie

user: "Lukasz"

> Od czego funkcja round()? > > double d = 45.237; > double d_2rounded = round(d*100)/100; A w jakiej bibliotece? Bo w BCB5 i BC3.1 to tego nie znalazłem...

Re: [c++] double - banalne pytanie

user: Marcin 'Qrczak' Kowalczyk

"Andrzej" writes: > jaką funkcja się posłużyć żeby z liczby 45,234 zostało tylko 45,23 > (pressision?) Jeśli przypadkiem chcesz tę liczbę tylko sformatować do tekstu, to w ogóle nie zaokrąglaj liczby jako liczby, tylko określ liczbę cyfr przy sformatowaniu (jeśli przez iostreams, to z głowy nie powiem, coś w stylu fixed i setprecision - są metody strumieni i manipulatory (iomanip)). -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/

Re: [c++] double - banalne pytanie

user: gacek

Lukasz wrote: >>Od czego funkcja round()? >> >>double d = 45.237; >>double d_2rounded = round(d*100)/100; > > > A w jakiej bibliotece? > Bo w BCB5 i BC3.1 to tego nie znalazłem... > > jak nie ma to duoble round(double a) {return floor(a+0.5);} gacek

Re: [c++] double - banalne pytanie

user: Mariusz Maslowski

Lukasz wrote: >>Od czego funkcja round()? >> >>double d = 45.237; >>double d_2rounded = round(d*100)/100; >> >> > >A w jakiej bibliotece? >Bo w BCB5 i BC3.1 to tego nie znalazłem... > > W Standardowej C. #include -- Pozdrawiam serdecznie, Mariusz Maslowski "Czas robi swoje, a Ty, tej?" -- Stary Marych

Re: [c++] double - banalne pytanie

user: "Lukasz"

> W Standardowej C. > #include Nie ma, nie ma, nie ma... :( Cału czas podejrzewam, że masz tę funkcję gdzieś napisaną przez siebie. Sprawdziłem w dwóch: Borland C++ Builder 5.0 Borland 3.1

Re: [c++] double - banalne pytanie

user: Marcin 'Qrczak' Kowalczyk

"Lukasz" writes: >> W Standardowej C. >> #include > > Nie ma, nie ma, nie ma... :( round jest standaryzowany w C99 i POSIX tudzież Single Unix Specification. Nie było w C89. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/