2016-06-10 4 views
0

bin Ich brauche Hilfe, wie die Ausgabe in C++ formatiert wird, um Dezimalstellen anzuzeigen, wenn vorhanden ist, oder die ganze Ganzzahl anzeigen, wenn kein Dezimaltrennzeichen vorhanden ist Show.Formatierung der Ausgabe für Gleitkommawerte nur, wenn in C++

it should show 95.7 // When there is decimal 
it should show 90 // When there is no decimal 

Ich schrieb:

cout << setprecision(1) << fixed; 

Es gibt mir nicht die erwartete Ausgabe. Anstatt 90 zu drucken, druckt es 90.0

+0

Also, was ist dein Problem? Welchen Fehler haben Sie? –

+0

Einfach 'std :: cout << 95.7 << '' << 90.0 << '\ n';' zeigt standardmäßig die Werte wie gewünscht an. Hast du wirklich nicht mal Code geschrieben und geschaut? Wenn Sie Code haben, der nicht funktioniert, veröffentlichen Sie ihn und zeigen Sie uns die Ausgabe, die Sie tatsächlich erhalten. –

+0

Wenn ich schreibe: cout << setprecition (1) << behoben. Es gibt mir keine erwartete Ausgabe. Anstatt 90 auszudrucken, druckt es 90.0 – Allen

Antwort

1

Angenommen, dass Sie Division durchführen.

  1. Mit cout:
    i) Wenn der Dezimalteil .000000 entpuppen, dann cout verwendet, wird nur die ganze Zahl (ganze Zahl) Teil drucken.
    ii) Wenn sich der Dezimalteil als etwas anderes als .000000 herausstellt, dann wird auch den Dezimalteil ausgeben.

    In beiden Fällen führt also zu dem Verhalten, das Sie benötigen.

  2. Verwendung printf()
    i) Wenn der Dezimalteil .000000 erweist, dann printf() verwendet, wird die Ganzzahl, gefolgt von der Dezimalteil drucken, z.B. 3.000000. In diesem Fall müssen Sie manuell damit umgehen, so dass Sie die Ausgabe nur als 3 erhalten. Sie können verschiedene Ansätze verfolgen, wie zum Beispiel in eine Zeichenkette konvertieren, eingebaute Funktionen verwenden, usw.
    ii) Wenn der Dezimalteil nicht .000000 ist, dann wird printf() die Ausgabe wie 3.123456 ausgeben.

Bitte beachten Sie den folgenden Code. Ich verwende die Tatsache, dass, wenn der Rest der Division 0 ist, es bedeutet, dass der Dezimalteil .000000 ist und die Zahlen zu int vor dem Drucken typecasting. Sie müssen möglicherweise einen anderen Ansatz verwenden als oben angegeben.

#include <iostream> 
#include <cstdio> 
using namespace std; 

int main() { 
    double num1=270.0, num2=90.0; 
    cout<<num1/num2<<"\n";      //prints just 3 
    printf("%f\n", num1/num2);     //prints 3.000000 
    if((int)num1%(int)num2==0)     //means num1 is a multiple of num2. So decimal is .000000 
     printf("%d\n", (int)num1/(int)num2);  

    num2=91.0; 
    cout<<num1/num2<<"\n";      //prints 2.96703 
    printf("%f\n", num1/num2);     //prints 2.967033 
    if((int)num1%(int)num2!=0)     
     printf("%f\n", num1/num2); 
    return 0; 
} 

Live-Demo here.

1

Sie können eine Funktion erstellen, die den Float in nur eine Dezimalstelle konvertiert. Testen Sie dann, ob der Float gleich seinem integralen Teil ist (d. H. Wenn 90.0 gleich 90 ist), dann drucken Sie nur den integralen Teil, andernfalls drucken Sie den Float.

#include <iostream> 
#include <math.h> 

using namespace std; 

void printFloat(float num) { 

    // convert num to properly rounded decimal with 1 decimal place 
    num = floor(num*10 + .5)/10; 

    // if the float equals the whole number, only show the whole number 
    if (num == (int)num) 
     cout << (int)num << endl; 
    else 
     cout << num << endl; 
} 

int main() { 
    float num1 = 90.0; 
    float num2 = 90; 
    float num3 = 90.00001; 
    float num4 = 95.7; 
    float num5 = 95.74; 
    float num6 = 95.75; 

    printFloat(num1); // prints 90 
    printFloat(num2); // prints 90 
    printFloat(num3); // prints 90 
    printFloat(num4); // prints 95.7 
    printFloat(num5); // prints 95.7 
    printFloat(num6); // prints 95.8 
} 
+1

'if (num == (int) num) cout << (int) num; sonst ist cout << num; 'kürzer. Keine Subtraktion, um den Bruchteil zu erhalten –

+0

Danke @ LưuVĩnhPhúc - Ich habe meine Antwort aktualisiert, um Ihren effizienteren Vorschlag zu reflektieren. – amallard