2017-01-07 2 views
-4

Dies ist nur ein Teil eines Programms, das ich versuche zu formulieren. Immer wenn meine Eingabe eine 4-stellige Zahl ist, bekomme ich den Wert von 'z' vom Programm auf 9999, wenn die erwartete Ausgabe 10000 ist. Dies geschieht auch nur für die Eingabe bestimmter Ziffern. Zum Beispiel, wenn meine Eingabe eine fünfstellige Zahl ist, bekomme ich eine Ausgabe von 100000, was die erwartete Ausgabe ist. Warum passiert dies?Wenn ich meine Eingabe als 1234 setze, bekomme ich meine Ausgabe als 9999, aber die Ausgabe, die ich erwarte, ist 10000. Was ist falsch an meinem Code?

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <string.h> 
    int main() { 
    char m[20]; 
    int a,b,n,len,z; 
    scanf("%d",&a); 
    itoa(a,m,10); 
    len=strlen(m); 
    z=pow(10,len); 
    printf("%d\n",z); 
    return (EXIT_SUCCESS); 
} 

Input:

Output:

als LEN = 4, wenn der Eingang 1234, so sollte meine Ausgabe 10000.

+0

Wenn Genauigkeit ein Problem ist, verwenden Sie Ganzzahlen anstelle von Gleitkommazahlen. – BLUEPIXY

+0

Woher hast du das 'itoa()'? Kann mich nicht erinnern, es früher gesehen zu haben. –

+3

Wenn '9999.99999999'' int' zugewiesen ist, wird es abgeschnitten, nicht gerundet. Bitte beachten Sie [Ist Fließkomma-Mathematik gebrochen?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

Antwort

-1

Wie in den Kommentaren nicht sein:

Wenn 9999.99999999 zu int zugeordnet ist es abgeschnitten wird, nicht abgerundet. Bitte sehen Is floating point math broken?

Die pow Funktion gibt einen Gleitkommawert (double spezifisch zu sein).

Um das Problem zu beheben:

  • Declare z als double.
  • Verwenden Sie das Format %.0f anstelle von %d.
Verwandte Themen