• ベストアンサー

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

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

  • hidezo
  • お礼率85% (193/225)

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

  • ベストアンサー
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桁を超えると秀丸の場合は四捨五入?してしまうようでいつか限界をむかえそうです・・・ 次は、エクセルマクロを考えてますが、テキストを扱うなら秀丸のほうが良い気がし、マクロも覚えやすい気がしています。

関連するQ&A

  • 浮動小数点について

    当方、浮動小数点を勉強しているのですが、 テキストの解説を読んでも理解が出来ません。 正規化とか指数と仮数の意味が分かりません。 そこで質問なのですが、浮動小数点の計算方法を教えて下さい。 IEEE形式の浮動小数点も教えて頂けると助かります。 また、下記の問題について解説して下さい。 数値を16ビットの浮動小数点表示法で表現する。 形式は図に示す通りである。10進数0.375を正規化した表現は、どれか。 ここでの正規化は、仮数部の有効数字よりも上位の0が無くなるように、 指数部を調節する操作である。 (図は添付します) 何故「E」の値が「1111」になるのでしょうか。 お手数ですが、ご教授お願いします。 尚、特に分かり易いホームページがあったら、 そのURLを記載して頂いても結構です。 以上、よろしくお願い致します。

  • 浮動小数点について

    独学でプログラミングの勉強をしています。Wiki等で調べたりしましたが、 下記テキストの質問の計算が全く分かりません。 分かりやすく説明して頂けるとありがたいです。 宜しくお願い致します。 質問: 二つの浮動小数点の数字があり、SEEMMMM(S=符号付数値、E=指数、M=仮数)の形式で表示されています。 指数はエクセス数50、仮数は符号付数値、小数点は右の仮数に表示されます。 0 53 1110 0 50 3020 二つの数字を加算し、正しく表示された浮動小数点形式と実数をすべての計算式も含め表しなさい。

  • 浮動小数点から文字列の変換の時に

    浮動小数点floatからStrへの変換をgcvt関数で行なうときに、値が小さいと文字列0.00005が欲しいのに5e-05になってしまいます。 どうすればよいですか?教えてください。

  • javascriptで浮動小数点の問題

    javascriptで浮動小数点の問題を解決しつつevalをつかった電卓を作ることはできませんか? >>> //-が欲しい場合 var array2 = str.match(/-?[0-9]+\.?[0-9]*/g); for(var i = 0; i < array2.length; i++) { console.log(parseFloat(array2[i])); } な感じで数値を抜き出し 計算記号+-*/に従ってmathのメソッドを順次呼び出す関数を作成すればいいのです。 計算記号については抜き出した数値を文字列として数えれば抜き出せるはず。 このように教えてもらいましたが、正直難しすぎてさっぱりわかりません。 evalでは浮動小数点の問題は解決できないのでしょうか? 便利なライブラリなどもないでしょうか?

  • 浮動小数点表現

    浮動小数点表現の問題で以下の実行結果を元にfloat型変数 f に与えた実数の実際に格納されているビット列を表示するプログラムを作りたいのですが、 #include<stdio.h> main() { float a; scanf("%f",&a); printf("%f",a); } この程度までしか作れません。ポインタを使ってアドレスを表示することは分るのですが…。 どなたか教えていただけると助かります。 実行結果 Size of Float : 4 byte Size of Int : 4 byte f=0.500000000000000 00111111000000000000000000000000

  • 秀丸のマクロ

    マクロ全くの初心者です。 以下の秀丸のマクロを次のように変更したいです。 1連番の数字を記号$kの前ではなく後ろに。 2()は不要 3$sに入力した記号が出てきたら連番数字をはじめの1から連番にし、 これを繰り返す。 宜しくお願いいたします。 //----------------------------------------------// //Macro1 $k = input("記号は?"); $s = input("数字を1に戻す記号は?"); gofiletop; #i = 1; while( 1 ) { searchdown $k; if(!result) break; insert "("+str(#i)+")"; #i = #i + 1; } endmacro; //----------------------------------------------//

  • 秀丸マクロについて

    秀丸マクロ初心者です。 OS:XP(SP3)、秀丸:7.08を使っています。 テキストファイルのデータをファイルの先頭から一行ずつ 文字列型変数に読み込んでメッセージをだそうとしていますが うまくいきません。 コードのどこが悪いのか、もしくはもっと簡単にできるやり方などあれば 教えて頂けないでしょうか。 ■コード gofiletop; while (code != eof) { golineend; #end = x; golinetop; $str = gettext(x,y,#end,0); message $str; down; } endmacro;

  • 浮動小数点の比較について

    たとえば、以下のコードで、「違う」と表示されるように、浮動小数点の比較に失敗します。 #include <iostream> int main() { float f = 0.1; if (f == 0.1) { std::cout << "同じ"; } else { std::cout << "違う"; } return 0; } double f; とすれば、同じと表示させるのですが、代入して比較するだけで、比較に失敗するのは、どういう理由なのでしょうか?

  • 割り算での小数点の表示

    色々調べていますが、判りません。どうか教えてください。 エクセルで作業報告書を作っているのですが、 割り算で小数点以下を表示させたいのです。 I4のセルには120(分) J4のセルには1000(冊) そして、 K4のセルに計算式 =IF(J5=0,0,I5*60/J5)を入力しました。 (調べた結果でこの関数も自信ありません) その数値は07秒と表示されます。 これを、7.2(秒)と表示させるのにはどのようにしたら よろしいでしょうか? セルの表示形式はそれぞれ、「分」「秒」になっています。 ご存知の方、ぜひお教えください。 よろしくお願い申し上げます。

  • 浮動小数点の切り捨てで-0.5を-1に。

    こんにちは。 小数点以下を切り捨てたいときにキャストするために 以下のようにしたところ、 float  i ; for( i=-2.5f; i<3.5f; i+=1.0f ) {   printf( "%f %d\n", i, (int)i ) ; } -2.500000  -2 -1.500000  -1 -0.500000  0 0.500000  0 1.500000  1 2.500000  2 上記の様な結果になりましたが、これを -2.500000  -3 -1.500000  -2 -0.500000  -1 0.500000  0 1.500000  1 2.500000  2 のように-0.5なら-1にするようしたいのですが、 if文は使わずに計算だけで変換することは 可能でしょうか ?

専門家に質問してみよう