• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przelicznik miar w C++

VPS Starter Arubacloud
+1 głos
997 wizyt
pytanie zadane 24 czerwca 2015 w C i C++ przez Frezen Obywatel (1,330 p.)

Witajcie. Postanowiłem że zrobię sobie jakiś prosty przelicznik miar w c++. Jednak już napotkałem na problem. Otóż gdy robię przelicznik np. z gramy na tony to wyskakują liczby wykładnicze typu 1.23e-004. Dodam że zmienne były typu double. Przeszukałem trochę internet w poszukiwaniu jak usunąć te wartości wykładnicze i znalazłem taki oto kod:

printf("%f",(liczba_do_zamiany*0.000001));

Na początku mi to działało ale teraz jakimś cudem pojawiły się dodatkowe wartości:

Powinno wyjść samo 10 a wychodzi 10.0000009.

Dodam jeszcze fragment kodu:

double gtona (double liczba_do_zamiany)
{
    return printf("%f",(liczba_do_zamiany*0.000001));
} // funkcja obliczająca 

case 3: // fragment głównej funkcji
       cout << "Podaj liczbe do zamiany: ";
       cin >> liczba_do_zamiany;

       cout << gtona(liczba_do_zamiany) <<" ton"<< endl;

       getchar();getchar();
       system("cls");

O co może chodzić? Może źle użyłem tego printf?

2 odpowiedzi

+2 głosów
odpowiedź 24 czerwca 2015 przez krecik1334 Maniak (58,390 p.)
Złe użycie printfa, powinno być "%lf" o ile się nie mylę, + formatowanie odsyłam tu:

http://cpp0x.pl/dokumentacja/standard-C/tekst-sformatowany-printf/736
komentarz 24 czerwca 2015 przez draghan VIP (106,230 p.)
Ewentualnie dałbym tam po prostu "%g". :)
komentarz 24 czerwca 2015 przez Frezen Obywatel (1,330 p.)
Niestety ani %lf ani %g. Nie działa tak jakbym chciał. Próbowałem jeszcze jakoś wykombinować coś z tej strony ale niestety nic mi nie działa :/.
+1 głos
odpowiedź 24 czerwca 2015 przez draghan VIP (106,230 p.)
Pokaż kod sprzed wrzucenia tam printfa.
komentarz 24 czerwca 2015 przez Frezen Obywatel (1,330 p.)

Dużo ten kod się nie różni ale proszę:

double gtona (double liczba_do_zamiany)
{
    return liczba_do_zamiany*0.0000001;
}

 

komentarz 24 czerwca 2015 przez draghan VIP (106,230 p.)
Jeszcze poproszę sposób, w jaki używałeś tego kodu. ;) I co Ci w tym nie gra? Chodzi o to, że strumień wyjścia stosuje notację wykładniczą?
komentarz 24 czerwca 2015 przez Frezen Obywatel (1,330 p.)
W jaki sposób użyłem to jest u góry.

Właśnie o to chodzi że zamiast normalnej liczby wyskakuje mi z notacją wykładniczą np. 1e+008. A chciałbym żeby liczby wyświetlały się normalnie.
komentarz 24 czerwca 2015 przez draghan VIP (106,230 p.)

Przetestuj takie rozwiązanie:

#include <iostream>
using namespace std;

double gtona (double liczba_do_zamiany)
{
    return liczba_do_zamiany*0.0000001;
} // funkcja obliczająca

int main()
{
    double liczba_do_zamiany;
    cout << "Podaj liczbe do zamiany: ";
    cin >> liczba_do_zamiany;
    cout.setf( ios::fixed ); // każę strumieniowi w następnym wypisaniu użyć notacji z kropką dziesiętną
    cout << gtona(liczba_do_zamiany) <<" ton"<< endl;
    getchar();
    return 0;
}

 

komentarz 24 czerwca 2015 przez Frezen Obywatel (1,330 p.)

Z tą notacją zadziałało jednak pojawił się problem, że nie ucina zer. Tak to wygląda:

komentarz 24 czerwca 2015 przez draghan VIP (106,230 p.)
Niestety wydaje mi się, że nie znajdę dla Ciebie kompleksowego rozwiązania, bo jeśli ustawi się fixed, to zostaje na sztywno przydzielona precyzja wyświetlania. Oczywiście można ją zmienić, ale trzeba by było ją zmieniać za każdym razem w zależności od wypisywanej liczby.

Możnaby napisać do tego funckję, ale chyba nie ma sensu, bo jedynym sensownym rozwiązaniem jakie widzę, jest rzutowanie liczby na string i sprawdzenie jego długości (metoda ustalania liczby znaków w liczbie za pomocą mnożenia odpada z powodu precyzji obliczeń).

Podobne pytania

+1 głos
1 odpowiedź 7,657 wizyt
pytanie zadane 1 lipca 2015 w JavaScript przez Mieszko I Stary wyjadacz (10,980 p.)
0 głosów
1 odpowiedź 421 wizyt
0 głosów
1 odpowiedź 2,387 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...