あー…HSP自体の計算が狂っていることに対してはどうしようもできませんね。
x=1000
t = (logf(x) / logf(10))
mes 1.0 + t ;double
mes 1 + t ;double→int
mes 1 + str(t) ;double→str→int
私が示した方法は上記のように単に実数と整数で結果が違うときに
実数側に計算結果を合わせながら整数にする方法なので
x=999999
t = (logf(x) / logf(10))
mes 1.0 + t ;double
mes 1 + t ;double→int
mes 1 + str(t) ;double→str→int
のようにそもそも実数での計算がずれればずれますね…(考えてなかった)
理論値ではt<6なので(EXCEL曰く5.999999566)、
int(str(t))=5となってもらいたいのですが
HSPでは実数型の変数は小数第7位で四捨五入
されるので6になってしまうようですね。
結論としては
1 + (logf(x) / logf(10))
で数学的には常に桁数が求められるが
HSPの計算精度では1〜999998の範囲でのみ有効である。
したがってHSP上で求桁するには
strlen(str(x))
とするしかないということですね。
>てれてれさん
精度チェックお疲れ様でした。