投稿日 | : 2005/05/21(Sat) 16:33 |
投稿者 | : ガッ |
Eメール | : |
URL | : |
タイトル | : Re^6: VBのバグです |
ノ<前にもどこかでこういう話題を見つけたのですが、毎回私の誤爆に終わっていますた。
で、また気になったので少しテスツしてみますた。
'VB6標準EXE作成後、このコードを貼り付けて実行
Private Sub Form_Load()
'問題点:Int(0.0282*10000)=<281|282>?
Const v1 As Single = 0.0282! '0.0282!
Const v2 As Double = 0.0282 '0.0282#
Debug.Print "TypeName(v1)="; TypeName(v1), "TypeName(v2)="; TypeName(
v2)
'リテラルに問題があるかもしれないので、全てコピペ(orz
Debug.Print "v1="; Int(v1), "v2="; Int(v2)
Debug.Print "v1*1&="; Int(v1 * 1&), "v2*1&="; Int(v2 * 1&
amp;)
Debug.Print "v1*2&="; Int(v1 * 2&), "v2*2&="; Int(v2 * 2&
amp;)
Debug.Print "v1*10&="; Int(v1 * 10&), "v2*10&="; Int(v2 *
10&)
Debug.Print "v1*100&="; Int(v1 * 100&), "v2*100&="; Int(v
2 * 100&)
Debug.Print "v1*1000&="; Int(v1 * 1000&), "v2*1000&="; In
t(v2 * 1000&)
Debug.Print "v1*10000&="; Int(v1 * 10000&), "v2*10000&=";
Int(v2 * 10000&)
Debug.Print "v1*100000&="; Int(v1 * 100000), "v2*100000&="; I
nt(v2 * 100000)
End Sub
実行結果(イミディエイトウィンドウ)
TypeName(v1)=Single TypeName(v2)=Double
v1= 0 v2= 0
v1*1&= 0 v2*1&= 0
v1*2&= 0 v2*2&= 0
v1*10&= 0 v2*10&= 0
v1*100&= 2 v2*100&= 2
v1*1000&= 28 v2*1000&= 28
v1*10000&= 282 v2*10000&= 281
v1*100000&= 2820 v2*100000&= 2819
家のPCだと、どうやら単純にSingleとDoubleの制度の違いのように思える。
&新しい検証方法示してすんません(orz