ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 19:25

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年7月22日(土) 18:58 
オフライン

登録日時: 2005年12月13日(火) 17:42
記事: 57
何時も、お世話に成っています。

 リテラル値同士の乗算演算した結果がおかしいです。(Ver 4.24.00以降)

 全て試した訳ではありませんが、最初に気が付いたのがDouble型で他にも有るのかと
試してみるとLong型,DWord型もでした。
コード:
Dim a As Double
Dim b As DWord
Dim c As Long

'OK
a=328*100
b=328*100
c=328*100
Debug

'NG
a=100*328
b=100*328
c=100*328
Debug
題名に「リテラル値同士・・」と書きましたが、その限りで無いみたいですので、その方も確認お願いします。


宜しくお願いします。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年7月22日(土) 19:42 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
無符号数値が誤って符号拡張されていますね。
明示的に型キャストすれば問題を回避できます。
コード:
a=100*328 As Double
b=100*328 As DWord
c=100*328 As Long
面倒くさいけどね。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年7月22日(土) 20:36 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
ご報告ありがとうございます。
こちらでも現象が確認できました。次回のバージョンアップで修正させていただきます。


通報する
ページトップ
投稿記事Posted: 2006年7月25日(火) 14:39 
同じ現象かと思われましたので、ぶら下がらせていただきます。
プログラミング質問板のほうで、質問立てているのですが、
サンプルのCDPlayerの中の、Sub MainWnd_PlayButton_Clickのなかで、
nMax = (MCI_MSF_MINUTE(msp.dwReturn) * 60 + MCI_MSF_SECOND(msp.dwReturn)) * 10
SendMessage(hTrackBar,TBM_SETRANGE,0,MAKELONG(0,nMax))
で設定していますが、MessageBoxを使って調べてみると、nMaxの値が変な値になっています。
nMaxを使わず、
SendMessage(hTrackBar,TBM_SETRANGE,0,MAKELONG(0,(MCI_MSF_MINUTE(msp.dwReturn) * 60 + MCI_MSF_SECOND(msp.dwReturn)) * 10))
とすると正常に動きます。
nMax = (60 * MCI_MSF_MINUTE(msp.dwReturn) + MCI_MSF_SECOND(msp.dwReturn)) * 10とすると、問題なく動きますと教えていただきました。
しかし、nMaxを使わない場合と、MessageBoxで(MCI_MSF_MINUTE(msp.dwReturn) * 60 + MCI_MSF_SECOND(msp.dwReturn)) * 10とした場合は、正常な値となります。
このスレの現象と同じものでしょうか?
よろしくお願いします。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[4人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean