Konwersje typów z float do int - ciągłe wyświetlanie jako float

Konwersje typów z float do int - ciągłe wyświetlanie jako float
Endrju
  • Rejestracja: dni
  • Ostatnio: dni
1
xpeye napisał(a):

Liczba typu double ma 10 cyfr znaczących. Pobieram ją od użytkownika i rzutuje na typ float, mający 6 cyfr znaczących. Wtedy końcówka, zawierająca cyfry różne od zera, zostanie obcięta.

Nie zostanie. Wtedy śmieci będą wcześniej! (Kliknij link w poście @_13th_Dragon) Gdyby było jak mówisz, nikt nie stosowałby double bo jaki miałoby to sens?

XP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 153
0

Nawet tak

Kopiuj
else if(fabs((b/c)-(int)(b/c))<0.0001)
    printf("%.1f / %.1f = %d\n", b, c, (int)(b/c));

nie działa

dodanie znacznika <code class="c"> - fp

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Czy możesz mi wyjaśnić czemu drążysz bezsensowny temat dokładnej konwersji na int'a zamiast użyć "%g" ?

XP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 153
0

Bo ja chce to zrozumieć, a nie tylko skopiować Twój kod. Ja przez wakacje zrobiłem wszystkie 157 zadań z książki o C - włącznie z kolejkami i drzewami - i tylko to nie działa. Teraz robię zadania z PHP - przerobiłem 55% i wszystko działa. Tylko to zadanie spędza mi sen z powiek. Myślałem, że fabs załatwi sprawę, a tu kicha. Dlaczego?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Zmodyfikuj sobie ten kod:

Kopiuj
else if(fabs((b/c)-(int)(b/c))<0.0001)
    printf("%.1f / %.1f = %d ponieważ (%.25lf)\n", b, c, (int)(b/c),(double)fabs((b/c)-(int)(b/c)));

i sam zobacz.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

IMO najlepiej jest użyć sprintf i usunąć nadmiarowe zera a nie kombinować z konwersją do int:

Kopiuj
char tmp[32];
sprintf(tmp, "%.1f", b/c);
i = strlen(tmp);
while(i>0 && tmp[i-1]=='0')
    --i;
if (tmp[i-1]=='.')
    --i;
tmp[i] = 0;
printf("%.1f / %.1f = %s ponieważ (%.25lf)\n", b, c, tmp,(double)fabs((b/c)-(int)(b/c)));
XP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 153
0

W ksiażce o C http://helion.pl/ksiazki/jezyk-c-szkola-programowania-wydanie-v-stephen-prata,jcszpr.htm zabrakło takiego wytłumaczenia http://janek.ae.krakow.pl/~wiluszt/zajecia/c/ansic/krok_3/index.html %g - nie było żadnego - i stąd cały problem. Już działa. Ogromne dzięki

XP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 153
0

Mam jeszcze take dziwne pytanie a nie chcę zaczynać nowego wątku: czy każdy program w języku C, nawet jednoplikowy, musi być napisany na podstawie projektu, czy nie?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Sam język C czy C++ nie definiuje żadnego pojęcia projekt ani temu podobnego.
Tworzenia projektów wymagają niektóre IDE.
np DevC++ nie wymaga zakładania projektów dla programów jednoplikowych.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.