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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0313
koitaro少数点以下の0を削除したい5解決


koitaro

リンク

2007/3/13(Tue) 12:24:46|NO.6259

指定桁数で切り捨てや四捨五入は出来る様になったのですが、
小数点以下の0を削除したいのですが、つまずいています。
例えば、10.000000 は 10 に、20.002500 は 20.0025 に、0.1000000 は 0.1
となる様にしたいのですがどうしたらよいか教えて下さい。



この記事に返信する


Irisawa

リンク

2007/3/13(Tue) 13:23:29|NO.6261

こんな方法はどうでしょうか。


; 拡張マクロを有効にしてください p1 = 10.0 ; p1 = 20.0025 ; p1 = 0.1 buf = str(p1) mes "元の数値: " + buf ; 後ろから 0 を削除する for i, strlen(buf) - 1, instr(buf, , "."), -1 switch peek(buf, i) case '0' poke buf, i, 0 if peek(buf, i - 1) = '.' { poke buf, i - 1, 0 } swbreak default _break swbreak swend next mes "変換後: " + buf stop



Irisawa

リンク

2007/3/13(Tue) 13:32:46|NO.6262

補足説明。
13〜15行目は9行目でforの終値にinstrを直接書いているためなのでループの直前で
いったん変数に格納して変数から参照するようにすればもう少し簡単にできるかも。


p1 = 10.0 ; p1 = 20.0025 ; p1 = 0.1 buf = str(p1) mes "元の数値: " + buf ; 後ろから 0 を削除する e = instr(buf, , ".") - 1 for i, strlen(buf) - 1, e, -1 switch peek(buf, i) case '0' case '.' poke buf, i, 0 swbreak default _break swbreak swend next mes "変換後: " + buf stop



kz3

リンク

2007/3/13(Tue) 14:06:13|NO.6263

strf()も使える。

#define ctype f(%1) strf("%%%%f = %%f ",%1)+strf("%%%%e = %%e ",%1)+strf("%%%%g = %%g",%1) mes f(10.0) mes f(20.002500) mes f(0.1000000)



koitaro

リンク

2007/3/13(Tue) 14:52:36|NO.6265

>Irisawaさん、kz3さん
書込ありがとうございます。
どちらも同じ結果が得られるんですね。
とても参考になります。
どうして成るのか良くわからない部分があるので、
これからじっくり勉強したいと思います。



Irisawa

リンク

2007/3/13(Tue) 15:06:31|NO.6266

%gっていう方法があったんですね。知りませんでした。
この方が簡単で見やすいですね。恐らく、更に動作速度も高速だと思います。
結構、printf系のフォーマット文字列っていろいろあってすべて把握しきれないですね。



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