はじめまして。
kosyといいます。
以下のコードを実行すると、
四捨五入がうまく行われません。
double dVal1[] = {145.5, 160.8, 160.2, 156.5, 154.8,
169.75, 181.3, 172.8, 181, 173.2};
double dVal2[] = {160.8, 160.2, 156.5, 154.8, 169.75,
181.3, 172.8, 181, 173.2,167.5};
double orgVal[] = {165.58500, 167.78500};
double val[] = {0, 0};
for(int i=0; i<10; i++ ) {
val[0]+=dVal1[i];
val[1]+=dVal2[i];
}
for( int i=0; i<2; i++ ) {
printf(------------------------\n);
val[i]=val[i]/10;
printf(A1 %lf\n, val[i]);
printf(A2 %.*lf\n, 2,val[i]);
printf(O %.*lf\n, 2,orgVal[i]);
}
1回目の計算結果
A1:165.585000
A2:165.58
O :165.59
2回目の計算結果
A1:167.785000
A2:167.79
O :167.79
1回目のA2は四捨五入されないのでしょうか?
理屈が分からないため、どこら調べてよいか
わからないので、投稿させて頂きました。
よろしくお願いします。
投稿者です。
開発環境書き忘れましたので、追記します。
IDE:VS2002でC++です。
Win32のコンソールアプリケーションで現象が発生します。
よろしくお願いします。
> printf(A1 %lf\n, val[i]);
この表示の時にも四捨五入されているのです。
もっと高い精度で表示してみてください。
printf(A1 %.20lf\n, val[i]);
早速の回答有難うございます。
精度を上げて表示したところ、
原因がわかりました。
有難うございました。