Ausgaben mit Nachkommastellen



  • Was bedeutet die Ausgabe printf("%8.2f",rest)

    Ich habe in einem Latex Manual gelesen, dass reelle Zahlen,
    mit mind. 8 Stellen + 2 Nachkommastellen ausgegeben werden.

    Ich habe aber im Programm aber keine 8 Stellen, sondern 3 und 2 Nachkommastellen.

    Die Ausgabe beginnt bei 875 und zählt bis auf 0 runter.

    Kann es sein dass nur der Wert 800 hier die Relevanz zeigt.
    Hier fängt es laut einer Berechnung bei 875 an.



  • Prinzipiell bedeutet %8.2f eine Fließkommazahl mit maximal 8 Stellen vor und 2 Stellen nach dem Komma.

    Vielleicht postest du mal den betreffenden Code.

    gruß
    Martin



  • main(){
    int x,y;
    double preis,rest;
    
    printf("Restwerttabelle");
    printf("Neupreiseingabe: ");
    scanf(&preis);
    printf("Zeitraum")
    printf("\nJahr\t8 Jahre\t6 Jahre\t4 Jahre");
    for(x=1,x<=8;x+1){ /*äüßere Schleife*/
    printf("\n%i\t",x);
    for(y=8;y>=4;y=y-2){
    rest=preis-x*preis/y;
    if(rest<0)
    break;
    pritnf("%8.2f",rest);
    }
    }
    }
    


  • quovadis3 schrieb:

    main(){
    int x,y;
    double preis,rest;
    
    printf("Restwerttabelle");
    printf("Neupreiseingabe: ");
    scanf(&preis);
    printf("Zeitraum")
    printf("\nJahr\t8 Jahre\t6 Jahre\t4 Jahre");
    for(x=1,x<=8;x+1){ /*äüßere Schleife*/
    printf("\n%i\t",x);
    for(y=8;y>=4;y=y-2){
    rest=preis-x*preis/y;
    if(rest<0)
    break;
    pritnf("%8.2f",rest);
    }
    }
    }
    
    #include <iostream>
    
    int main() {
      int x,y;
      double preis,rest;
      std::cout << "Restwerttabelle " << std::endl 
                << "Neupreiseingabe: " << std::endl;
      std::cin  >> preis;
      std::cout << "Zeitraum" << std::endl 
                << "\nJahr\t8 Jahre\t6 Jahre\t4 Jahre" << std::endl;
      for(x = 1; x <= 8; ++x)  //  :arrow_right:  x+1 bewirkt nur, dass jedes Mal 2 verwendet wird =>  das Programm hängt sich hier auf, da x nicht verändert wird
        std::cout << x << "\t " << std::endl;
      for(y = 8;y >= 4;y -= 2){
        rest = preis - x*preis/y;
      if(rest>=0)
        std::cout << rest << std::endl;
    
    }
    

    Einigen SChreibfehler waren auch drin (pritnf ...).
    Das war ein C Code und kein C++ Code 😉



  • printf() Formatkennung sind sowieso ein Kapitel für sich (und die ganze Funktion gilt bei C++'lern oft als veraltet), aber ich versuch's mal:

    % - Beginn der Formatkennung
    8 - minimale Größe des Ausgabefeldes (wird notfalls links mit Leerzeichen aufgefüllt)
    .2 - Anzahl der Nachkommastellen
    f - Ausgabe eines double-Wertes in "nichtwissenschaflicher" Darstellung

    -> deine Zahlen werden mit einer Breite von (mindestens) 8 Zeichen dargestellt, davon ein Komma und zwei Nachkommastellen (und solange die Zahlen in diese 8 Stellen reinpassen, werden sie schön untereinander ausgerichtet).



  • Danke für die nette Erläuterung. Hab nur provosorisch den Code dahin geklatscht, daher ohne \n's, \t's. Hab den Mist aus dem Erlenkötter.

    Aber dachte auch, dass der zwar 8 Stellen bereitstellt sozusagen aber halt nicht belegt. War halt ne Willkürliche Belegegung. Hätte auch "%4.2lf" schreiben können.

    Danke auch für die Erklärung dass sich das Programm aufhängt.


Anmelden zum Antworten