2016-11-21 2 views
0

Ich versuche, die ersten beiden Ziffern nach dem Komma einer Zahl und die Prüfung zu erhalten sehen, ob sie sich gleich sind, und zur gleichen Zeit, nicht gleich 0C++ - Ich möchte die ersten beiden Ziffern nach einem Dezimalpunkt auswählen und prüfen, ob sie gleich sind und nicht 0

ich weiß, wie die Überprüfung Sachen zu tun, aber ich keine Ahnung, wie die ersten beiden Ziffern nach dem Komma wählen Punkt.

Mit setprecision würde mir die Zahl vollständig geben, nicht nur die zwei Nachkommastellen.

Zum Beispiel:

i = 3.141592 
cout << setprecision(3) << i 

ausgeben würde, 3.14, aber ich will nur 14.

+4

Wie wäre es mit 100 multiplizieren, um 314.1592 zu erhalten und dann in int zu werfen, was 314 ergeben würde und schließlich modulo 100, was zu 14 führen würde? –

+0

Ich wollte gerade das schreiben. lol – Sedrick

+0

'setprecision' ändert nur, wie die Nummer angezeigt wird. Wenn Sie die zwei Ziffern brauchen, brauchen Sie etwas anderes als einen Ausgabemanipulator. – user463035818

Antwort

0

Sie könnten den Boden Funktion aus der std Bibliothek verwenden

int(i*100 - (floor(i))*100) 

Hier ist ein gutes Beispiel Webseite ist: http://en.cppreference.com/w/cpp/numeric/math/floor

+0

Wenn er hinter den ersten beiden _digits_ steht, sollte das Ergebnis trotzdem in int umgewandelt werden, sonst haben Sie einen Gleitkommawert. Edit: Obwohl, um zu klären, habe ich Ihre Antwort nicht abgelehnt. –

+0

Ja, Sie haben Recht. Entschuldigung, es muss auch in int umgewandelt werden. Ich habe die Antwort aktualisiert – noobuntu

+0

@noobuntu Können Sie garantieren, dass das Ergebnis korrekt sein wird, egal was 'i' ist? Weil, weißt du, Gleitkommaarithmetik. Das ist für mich überhaupt nicht offensichtlich. Kommt es auf die zugrunde liegende Architektur an? – freakish

0

Sie eine Funktion implementieren könnte, dass die Ziffern als eine ganze Zahl zurückgibt.

#include <math.h> 

int digits_after_decimal_point(double number, unsigned int precision){ 
    double trunc = number - static_cast<int>(number); //3,141 > 0,141 
    return static_cast<int>(trunc * pow(10,precision)); 
} 

Beispielaufruf:

std::cout << digits_after_decimal_point(3.14159, 3) << std::endl; 

Ausgang:

141 

Aber das Problem ist, Überprüfung Ziffern der ganzen Zahlen ist (ohne ein Bündel von % Operationen verwendet wird) ziemlich rückgängig gemacht werden. Zur Überprüfung könnten Sie das Ergebnis in eine std::string (mit std::ostringstream) konvertieren und dann bestimmte Indizes vergleichen.

Verwandte Themen