Int(), Fix() の不思議な動作。なぜ?

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
JJon.com

Int(), Fix() の不思議な動作。なぜ?

#1 投稿記事 by JJon.com »

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に格納するには
どうコーディングすればよいのでしょう? 教えてください。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#2 投稿記事 by イグトランス »

これはバグのような気がします。

20÷7の結果で2がほしければ整数除算の20 \ 7を使ってみてはどうでしょうか。
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

#3 投稿記事 by NoWest »

> これはバグのような気がします。
>
> 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
が正しいです。
返信する