int zahlen dividieren und kommazahl ausgeben



  • Hallo wie kann man aus dem int ergebniss ein ergebniss mit kommazahl bekommen ?

    Es darf keine float oder double Variable benutzt werden....

    Ich hab das so probiert aber das funktionierte nicht 😞

    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    int a,b,erg;
    
    cout<<"Zahl 1: ";
    cin>>a;
    
    cout<<"Zahl 2: ";
    cin>>b;
    
    erg = 0.1*  a / b  ;
    
    cout<<"Erg : "<<erg<<"\n";   //das ergebniss soll als kommazahl ausgeben werden
    
    system("PAUSE");
    }
    //---------------------------------------------------------------------------
    


  • casten würde ich sagen, wenn das nicht als verwenden von float zählt



  • Dann solltest du das Ergebnis aber auch nicht in einer Variable speichern, sondern in einem temporären Ausdruck ausgeben lassen.


  • Administrator

    Gibt es eine Angabe über Anzahl der Kommastellen? Wenn nicht, dann geht das relativ einfach:

    #include <iostream>
    
    const int DECIMAL_ADJ = 100;
    
    int main()
    {
      int first, second;
    
      std::cin >> first;
      std::cin >> second;
    
      first *= DECIMAL_ADJ;
      second *= DECIMAL_ADJ;
    
      int result = (first * DECIMAL_ADJ) / second;
    
      std::cout << (result / DECIMAL_ADJ) << '.' << (result % DECIMAL_ADJ) << std::endl;
    
      return 0;
    }
    

    So hast du eine Genauigkeit auf 2 Kommastellen 😉

    Grüssli



  • Warum nicht einfach:

    #include <iostream>
    
    int main()
    {
      int a, b;
    
      std::cin >> a;
      std::cin >> b;
    
      std::cout << static_cast<double>(a)/b << std::endl;
    
      return 0;
    }
    


  • Das ging aber irgendwie viel unkomplizierter irgendwie mit 0.1 * oder so ich weiss net mehr genau wie das war _


  • Administrator

    Ach, ich trottel, du darfst nur keine Variablen verwenden? Nicht komplett auf double und float verzichten ...

    #include <iostream>
    
    int main()
    {
      int a, b;
    
      std::cin >> a;
      std::cin >> b;
    
      std::cout << (1.0 * a / b) << std::endl;
    
      return 0;
    }
    

    Grüssli



  • Genau das war es Dravere 🙂

    ty :):):):):)



  • Nexus schrieb:

    Dann solltest du das Ergebnis aber auch nicht in einer Variable speichern, sondern in einem temporären Ausdruck ausgeben lassen.

    Ohne Code scheint hier gar niemand mehr in der Lage zu sein, selber etwas umzusetzen... 🙄


  • Administrator

    Nexus schrieb:

    Nexus schrieb:

    Dann solltest du das Ergebnis aber auch nicht in einer Variable speichern, sondern in einem temporären Ausdruck ausgeben lassen.

    Ohne Code scheint hier gar niemand mehr in der Lage zu sein, selber etwas umzusetzen... 🙄

    Tja, deine Angabe stimmt aber auch nicht. Er hat mit 0.1 multipliziert anstatt mit 1.0 ... ok, der Fehler hätte ihm eigentlich auffallen müssen, aber hey, nicht jeder ist zu jederzeit so klar im Kopf ... ... 🤡

    Zudem, so ein kleines Problem, ohne Code zu behandeln, dauert viel zu lange 😉

    Grüssli



  • Dravere schrieb:

    ...

    #include <iostream>
    
    int main()
    {
      int a, b;
    
      std::cin >> a;
      std::cin >> b;
    
      std::cout << (1.0 * a / b) << std::endl;
    
      return 0;
    }
    

    4
    0
    1.#INF
    Drücken Sie eine beliebige Taste . . . 😃


  • Administrator

    gg schrieb:

    4
    0
    1.#INF
    Drücken Sie eine beliebige Taste . . . 😃

    Was ist daran so lustig? Ist doch absolut korrekt ... Irgendwie entgeht mir der Witz ...

    Grüssli



  • Dravere schrieb:

    Tja, deine Angabe stimmt aber auch nicht. Er hat mit 0.1 multipliziert anstatt mit 1.0 ... ok, der Fehler hätte ihm eigentlich auffallen müssen, aber hey, nicht jeder ist zu jederzeit so klar im Kopf ... ... 🤡

    Es ging ja eigentlich auch nicht um die 0.1 . Ich überlegte mir einfach, ob ich den Code noch schreiben sollte. Ich entschied dann, es nicht zu tun - in der Hoffnung, der Threadersteller würde selber überlegen, was ich damit gemeint haben könnte, und daraus lernen. Offensichtlich war das ein Fehler.

    Mal abgesehen davon ist es sowieso nicht gerade optimal, einen Cast durch eine Multiplikation zu umgehen. XMaster hat ja bereits geschrieben, wie es geht; alternativ kann man auch beide Operanden casten. Diesmal mit Code:

    std::cout << static_cast<float>(a) / static_cast<float>(b) << std::endl;
    

Anmelden zum Antworten