投稿日 | : 2005/05/21(Sat) 16:04 |
投稿者 | : Starfish |
Eメール | : |
URL | : |
タイトル | : Re^5: VBのバグです |
> > CInt関数は、四捨五入です。Int関数は、切り捨てですので、単純に代わりとして
> > 使用できません。
>
> 四捨五入 ではなく丸めだと思うのですが(VB6.0 or .NET )
> 0.0282# だって丸めだし、Debug.Print (100 / 3 * 3) これも丸めの結果では。
丸める方法が、四捨五入で丸めるか、切捨てで丸めるかの違いです。
Debug.Print CInt(0.288 * 100)
Debug.Print Int(0.288 * 100)
CInt関数は、28.8=>29(小数点以下を四捨五入)
Int関数は、28.8=>28(小数点以下を切り捨て)
> 但し、コンパイルで 最適化なし と あり では結果が違ってきますが。
> 最適化ありで 282 なし、もしくは P-Code コンパイルで 281 です。
> (EXE にした場合)
>
> .NET では (最適化?)されているからでは。
Int(0.0282 * 10000) の結果
VB6.0 開発環境 1回目 282 2回目以降 281
VB6.0 EXE(コンパイル)282
VB6.0 EXE(P-Code) 281
VB.NET 282
本来単純な計算ですから誤差があったとしても、同じ値にならないと
おかしいですよね。VB6.0のインタープリッタで動いているときの
動作がおかしいのではないでしょうか。