2017-01-07 8 views
-4

これは私が定式化しようとしているプログラムの一部です。私の入力が4桁の数字であるときは、期待される出力が10000であるときに、プログラムからの「z」の値が9999になる。また、これはある桁の入力に対してのみ起こる。例えば、私の入力が5桁の数字であるとき、私は期待される出力である100000の出力を得ます。なぜこうなった?入力を1234として入力すると、出力は9999になりますが、期待している出力は10000です。私のコードで何が問題になっていますか?

#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); 
} 

入力:

出力:として

LEN = 4入力はそう1234である場合私の出力は10000

+0

精度が問題になる場合は、浮動小数点数の代わりに整数を使用します。 – BLUEPIXY

+0

どこに 'itoa()'がありますか?それ以前にそれを見て覚えていない。 –

+3

'9999.99999999'が' int'に代入されると、丸められずに切り捨てられます。浮動小数点演算は壊れていますか?(http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

答えて

-1

としてあってはならないコメントで説明:

9999.99999999が が丸められていない、それは、切り捨てられintに割り当てられている場合。 Is floating point math broken?

pow関数は(具体的にdouble)浮動小数点値を返す参照してください。問題を修正するには

  • doubleとしてzを宣言します。
  • %dの代わりに%.0fという形式を使用してください。
関連する問題