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

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: Int(), Fix() の不思議な動作。なぜ?

by NoWest » 2005年10月27日(木) 19:37

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

by イグトランス » 2005年10月27日(木) 19:22

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

20÷7の結果で2がほしければ整数除算の20 \ 7を使ってみてはどうでしょうか。

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

by JJon.com » 2005年10月27日(木) 18:56

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に格納するには
どうコーディングすればよいのでしょう? 教えてください。

ページトップ