HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0315
TOMMY関数int()の挙動について3解決


TOMMY

リンク

2022/3/15(Tue) 20:36:53|NO.95738

HSP 3.6を使用しています.

int(x)の出力がおかしいことがあります.

objsize 100 x= double(0) mes "x=": input x: button goto "start", *start stop *start a= (x/double(100))*double(1000) +double(0.5) b= int(a) dialog "( " +x +"/100 )×1000+0.5 = " +a +"\nint( " +a +" ) = " +b stop
上記スクリプトで,xの数値を様々に変えて確かめてみるとわかりますが,
例えば,「x= 2.05」とすると,「a= 21.000000」ですが,「b= 20」になってしまいます.

このような数値はわりと普遍的に存在しているようで,
x= 0.35, 1.45, 5.05, 40.05, 50.05, 400.05...などなど
いずれも,int(a)の出力がaよりも1少なくなってしまいます.

aの計算式の記述になにか問題があるのでしょうか.
それとも,HSPの仕様でこのような結果になるのでしょうか.

ご教示頂けますと幸いです.
よろしくお願いします.



この記事に返信する


f(平和な日々)

リンク

2022/3/15(Tue) 20:57:22|NO.95739

実数aが実は20.9999999999...なだけ。

a= (x/double(100))*double(1000) +double(0.5) a+=0.00000001 b= int(a)
とかしてみればすぐわかる。



メルクーフ

リンク

2022/3/15(Tue) 21:27:01|NO.95740

 こちらの記事が参考になるんじゃないかと思いますが。

http://hsp.tv/play/pforum.php?mode=pastwch&num=91428



TOMMY

リンク

2022/3/16(Wed) 07:21:23|NO.95741

なるほど。理解しました。
ご教示下さいまして、有難うございました。



ONION software Copyright 1997-2023(c) All rights reserved.