- ベストアンサー
秀丸浮動小数点Verマクロでの、小数点表示について
秀丸の浮動小数点版で、以下のようなマクロを実行すると、 #i=0.01; #j=#i/1000; message str(#j); 表示結果は、1E-005となってしまいます。 これを、0.00001と表示させたいと思いますが、どのようにしたら良いでしょうか? 汎用性を持たせるために、IF分で1E-005であれば、0.00001とするといったことは避けたいと思います。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
下記は俺が作ったフリーソフト内で使っているものです。 参考になりますか? (動作させる場合、全角スペースをタブに置き換えてください) call MkRealNumber "1E-005"; message $$return; MkRealNumber: $$sans = $$1; ##pos = strstr($$sans, "E"); if ( 1/2 == 0 ) return $$sans; if ( ##pos == -1 ) return $$sans; ##index = val(rightstr($$sans, strlen($$sans)-##pos-1)); $$real = leftstr($$sans, ##pos); ##minus = false; if ( ##index < 0 ) ##minus = true; ##ppos = strstr($$real, "."); if ( ##ppos != -1 ) { $$bstr = leftstr ( $$real, ##ppos ); $$astr = rightstr( $$real, strlen($$real)-##ppos-1 ); $$real = $$bstr + $$astr; } else { ##ppos = 1; } ##ppos = ##ppos + ##index; ##length = strlen($$real); if ( ##minus == false ) { if ( ##length > ##ppos ) { $$bstr = leftstr ( $$real, ##ppos ); $$astr = rightstr( $$real, strlen($$real)-##ppos ); $$real = $$bstr + "." + $$astr; } else if ( ##length < ##ppos ) { while ( ##length < ##ppos ) { $$real = $$real + "0"; ##ppos = ##ppos - 1; } } } else { if ( ##ppos > 0 ) { $$bstr = leftstr ( $$real, ##ppos ); $$astr = rightstr( $$real, strlen($$real)-##ppos ); $$real = $$bstr + "." + $$astr; } else if ( ##ppos <= 0 ) { while ( ##ppos < 0 ) { $$real = "0" + $$real; ##ppos = ##ppos + 1; } $$real = "0." + $$real; } } return $$real;
お礼
ありがとうございます。 秀丸マクロはあまり詳しくなく、##のように#を二つ付ける理由やCall Returnも分からないレベルですが、実際に実行し動くことを確認しました。 また、どのようにしているかもおよそ理解できたつもりです。 いろいろ試していたところ、数値0.1はstrを使っても0.1になり、数値0.1未満は1E-005のような表記になることが分かり、1.001のように正数値が0でない場合は、strを使っても1.001のままになることが分かりましたので、0から0.1未満の時は+1をして、-0.1~0の時は-1をし、strしてから文字1を0に置き換えるようにしました。 ただ、整数値が0でない場合で小数点5桁を超えると秀丸の場合は四捨五入?してしまうようでいつか限界をむかえそうです・・・ 次は、エクセルマクロを考えてますが、テキストを扱うなら秀丸のほうが良い気がし、マクロも覚えやすい気がしています。