ActiveBasic Ver.4.10.02 で次の4行のプログラムを作成して,
----------------------------------------
#prompt
Dim R, Q=20, P=7
R = Int(Q/P)
Print Int(20/7), R
----------------------------------------
実行すると,次のように異なる値が出力されます。
----------------------------------------
2 3
----------------------------------------
どうしてこういう結果になるのでしょう?
また,20÷7= 2.857… の整数部「2」を変数Rに格納するには
どうコーディングすればよいのでしょう? 教えてください。
Int(), Fix() の不思議な動作。なぜ?
> これはバグのような気がします。
>
> 20÷7の結果で2がほしければ整数除算の20 \ 7を使ってみてはどうでしょうか。
そうです。こいつはバグですね。(メールで報告済み)
Includeフォルダ内のBasicフォルダに入っているfunction.sbp内の
定義のミスだと思われます。
コード: 全て選択
Function Fix(number As Double) As Long
Fix=number As Long
End Function
Function Int(number As Double) As Long
Int=number As Long
'負の場合は、切り上げ
If number<0 Then
If number<(number As Long) Then Int=Int-1
End If
End Function
なぜかActiveBasicの実数から整数のキャストは四捨五入が標準になっています。
この場合、
コード: 全て選択
Function Int(number As Double) As Long
Int=number As Long
'正の場合は、切り捨て
If number>0 Then
If number<(number As Long) Then Int=Int-1
End If
'負の場合は、切り上げ
If number<0 Then
If number<(number As Long) Then Int=Int-1
End If
End Function