5

私はプログラミングの世界に不慣れで、C++ はすでに私を失いつつあります。プログラムにこれらの行がありました

pennies=(amount-nickels*.05)/.01;

はa double、間およびニッケルint

penniesが の場合、プログラムは正しい値を返しますが、penniesが の場合はdouble常に少しずれています (ほとんどの場合 1 ずれています) 。int

なぜこうなった?

4

4 に答える 4

1
                   pennies=(amount-nickels*.05)/.01; 

上記の式では、変数 amount(これは double) のため、分子と分母の算術演算は doubleで行われます。ここで暗黙の変換が行われます。最後に、ペニーが double の場合、計算結果はペニーで格納されます。int の場合、計算結果の小数部分は失われます。中間計算は常に double で行われ、ペニーの種類には依存しません。

#include <stdio.h>

int main()
{

   int a ;

   double c,d=10.55555;

   a =  c=  (d+ 10*.5)/0.5 ;
   printf("%f : %d/n",c,a);
   return 0;
}

出力は次のとおりです。

31.111100:31

ここでは、最初の 10 が float に昇格され、次に 10*.5 が評価され、double 値との加算により double に昇格されます。分子が double であるため、分母も double に変換されるため、計算は double 形式でのみ行われます。 .

于 2013-08-06T09:19:10.723 に答える
1

式の右側の部分で浮動小数点数を計算しますが、int 値に double を格納しようとします。これを行うと、小数部分が失われます。

于 2013-08-06T07:53:45.600 に答える