ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > gerundete Zahlen | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
17.05.2003, 21:57 Uhr KannNix! Posts: 78 Nutzer |
Hallo zusammen, ich bräuchte mal einwenig Hilfe bei einem kleinen Programm in C. Es soll ein Programm erstellt werden das bei der Eingabe von a=6.0 und b=1.0 x berechnet(x=b/a) und ausgibt. Ok... bis jetzt kein Problem aber nun kommt es. Ausgegeben werden soll auf dem Bildschirm 1.000 / 6.000 = 0.170 . Wobei das Ergebnis das Problem ist da auf 2 Stelle gerundet werden soll und die dritte Stelle eine Null sein muß. Anders Beispiel : b=1.0 a=3.0 Ausgabe 1.000 / 3.000 = 0.330 ... bitte um Lösungshilfen ... [ - Antworten - Zitieren - Direktlink - ] |
17.05.2003, 22:08 Uhr KannNix! Posts: 78 Nutzer |
... achso ... bitte nicht die Lösung ... printf("&.2f0",ergebnis); danke ... [ - Antworten - Zitieren - Direktlink - ] |
18.05.2003, 10:14 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Hmm, weiss nicht ob es eine Systemfunktion dafür gibt aber mit ein paar "hacks" dürfte es auch so gehen: c = (int) (((a / b) * 100.0) + 0.5) / 100.0; wobei die Beiden 100er für die Anzahl der Stellen hinter'm Komma stehen: 100 = 3, 1000 = 4, 10000 = 5 usw. a = 1.0 b = 6.0 c = 0.170000... gruss und hoffe geholfen zu haben. [ Dieser Beitrag wurde von DariusBrewka am 18.05.2003 editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
18.05.2003, 15:15 Uhr KannNix! Posts: 78 Nutzer |
Zitat: bei dieser lösung kommt es aber immer noch zu Rundungsfehlern bei mir ergebnis=(((a/b)*100.0)+0.5)/100.0; printf("%.3f",ergebnis); würde 0.172 als Ergebnis rauskommen. wobei man ja hier auch wieder "hacken" könnten. Einfach die printf Anweisung ändern und eine null Schreiben. printf("%.2f0",ergebnis); jetzt würde auch 0.170 rauskommen. Glaube aber das es zuviel "gehackt ist". Habe jetzt allerdings in der math.h die Befehle floor und ceil zum aufrunden bzw zum abrunden gefunden. Mal sehen was man damit machen kann. bei: ergebnis=floor(((a/b)*100.0)+0.5)/100.0; printf("%.3f",ergebnis); würde schonmal 0.170 rauskommen... [ - Antworten - Zitieren - Direktlink - ] |
18.05.2003, 20:00 Uhr thomas Posts: 7716 Nutzer |
Wer lesen kann ist klar im Vorteil. Darius hat mit (int) die Nachkommastellen abgeschnitten. Das darfst du nicht weglassen. Deine Lösung mit floor() ist vermutlich besser, denn bei dem Umweg über int muß zweimal konvertiert werden, während bei floor() vermutlich nur ein paar Bytes auf Null gesetzt werden. x = floor(b / a * 100.0 + 50.0) / 100.0; BTW, was stört dich an "%.2f0" ? Bei der Aufgabenstellung (zwei Nachkommastellen mit 0 dahinter) dürfte das die eleganteste Lösung sein. Ich hätte da noch eine Lösung ohne Fließkommazahlen: x = (b * 100 + (a >> 1)) / a; printf ("%d.%02d0n",x/100,x%100); Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > gerundete Zahlen | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |