• ベストアンサー

秀丸浮動小数点Verマクロでの、小数点表示について

秀丸の浮動小数点版で、以下のようなマクロを実行すると、 #i=0.01; #j=#i/1000; message str(#j); 表示結果は、1E-005となってしまいます。 これを、0.00001と表示させたいと思いますが、どのようにしたら良いでしょうか? 汎用性を持たせるために、IF分で1E-005であれば、0.00001とするといったことは避けたいと思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.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;

hidezo
質問者

お礼

ありがとうございます。 秀丸マクロはあまり詳しくなく、##のように#を二つ付ける理由や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桁を超えると秀丸の場合は四捨五入?してしまうようでいつか限界をむかえそうです・・・ 次は、エクセルマクロを考えてますが、テキストを扱うなら秀丸のほうが良い気がし、マクロも覚えやすい気がしています。