ab.com コミュニティ
https://www.activebasic.com/forum/

計算結果がおかしい
https://www.activebasic.com/forum/viewtopic.php?t=2638
ページ 11

作成者:  猿渡信吾 [ 2010年5月07日(金) 05:44 ]
記事の件名:  計算結果がおかしい

なんてことはない時間を秒に直すだけの計算なのですが
コード:
	Dim st As SYSTEMTIME
	Dim b As Long, c As Long, e As Long

	st.wYear=2010
	st.wMonth=5
	st.wDay=6
	st.wHour=16
	st.wMinute=37
	st.wSecond=19

	b = (st.wHour *3600) + (st.wMinute *60) + st.wSecond


	st.wYear=2010
	st.wMonth=5
	st.wDay=6
	st.wHour=18
	st.wMinute=27
	st.wSecond=30


	c = (st.wHour *3600) + (st.wMinute *60) + st.wSecond


	e = st.wHour *3600
	e = e + (st.wMinute *60) + st.wSecond
cの結果が変になります
bは正しいので特定の数値のみ結果が変になるようです
eの様に分けると結果が正しくなります

AB 4.24
Windows XP HOME SP3


まぁ、ABの更新が止まっているので
こんな事を書いてもほとんど意味がないと思いますが
せめてAB4.24のバグ修正版だけでもでないかなぁと願いつつ。

ABはこれからどうなっていくんでしょう?
作者様からの何らかの発表がほしいです。

作成者:  ボン [ 2010年5月07日(金) 06:52 ]
記事の件名: 

c = (st.wHour as long *3600) + (st.wMinute *60)
これで解決!

作成者:  猿渡信吾 [ 2010年5月08日(土) 05:41 ]
記事の件名:  計算結果がおかしい

色々実験してわかったのですが
計算結果が元の型の範囲より大きくなるととおかしなことになるようです。

st.wHour はword型で0~65535
(18 *3600) + (27 *60) + 30=66450
65535を超えているのでその分引かれて914になってしまう。

回避法はボンさんが書かれているとおりキャストすればいいようです。

う~ん、こんな基本的なところにバグがあるとは・・・。
今まで書いてきたコードのすべてをチェックしないと・・・頭が痛くなってきた・・・。
Ver.4.13に戻す方が早いかも・・・他の皆さんはどうしてるんだろうか・・・。

作成者:  猿渡信吾 [ 2010年5月08日(土) 05:54 ]
記事の件名:  計算結果がおかしい

掲示板を見ていたら、今回の問題と同じことが既に書かれていましたね。
ABが放置されて、サイトが重くなって、あんまり見なくなってたんですよねぇ。
失礼しました。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/