English help on website



数値と文字列(Ver9.34対応版)
目次JavaScript対応− 数値と文字列
数値の範囲
getVar/setVarによる数値型変数とのやりとりは、32bit版/64bit版、通常版/浮動小数点数版に関わらず、32bitの数値として扱われます。
32bitの数値の上限は 2147483647、下限は -2147483648です。
js{...}内では、どのエディションでも32bitを超える数値や浮動小数点数を扱うことができます。
js{
  //数値型変数に渡すときは、どのエディションでも32bitの数値で最大 2147483647 最小 -2147483648
  hidemaru.setVar("#intMax",2147483647);
  hidemaru.setVar("#intMin",-2147483648);

  //32bit版でも64bit版でも通常版でも浮動小数点数版でも超えたら0
  hidemaru.setVar("#intMaxOver",2147483647+1);
  hidemaru.setVar("#intMinOver",-2147483648-1);
  //文字列化でOK
  hidemaru.setVar("$intMaxOver2",(2147483647+1).toString() );
  hidemaru.setVar("$intMinOver2",(-2147483648-1).toString() );

  //js内では、32bit版でも64bit版でも、数値は32bit超え可能(ただし通常52bitで、64bit全部はBigInt)
  hidemaru.setVar("$strOver32", (0xfffffffff*2).toString(16) );

  //通常版でも浮動小数点数版でも "0.3333333333333333"
  hidemaru.setVar("$strFloat", 1/3 );

}

message ""
  + str(#intMax)+"\n"  //どのエディションでも2147483647
  + str(#intMin)+"\n"  //どのエディションでも-2147483648
  + str(#intMaxOver)+"\n"  //どのエディションでも0
  + str(#intMinOver)+"\n" //どのエディションでも0
  + $intMaxOver2+"\n"  //どのエディションでも2147483648
  + $intMinOver2+"\n" //どのエディションでも-2147483649
  + $strOver32+"\n"  //どのエディションでも1ffffffffe
  + $strFloat+"\n"  //どのエディションでも0.3333333333333333
  ;
範囲から外れる値を扱う必要がある場合は、文字列でやりとりすることで、エディションを問わない共通のマクロにすることができます。
次の例は、カーソル行の文字列をJavaScriptの式として評価して、結果を挿入します。
入力(gettext2)と出力(insert)は文字列で、演算(eval)はJavaScriptとなり、全てのエディションで共通で使えます。
js{
  golineend2();
  var s=gettext2(0,lineno(),linelen2(),lineno());
  insert("\n"+eval(s.match( /((0x[0-9a-fA-F]+)|[ \t\-\+\*\/\.\(\)0-9])+/ )[0]) );
}
endmacro;
/*
↓この行で実行
4000*1.1
3.14159265359*12756.274*1000*1000
0xFFFFFFFF
0x1FFFFFFFFFFFFF
*/
文字列
マクロファイルを実行するとき、js{...}の記述は、最初に秀丸マクロとしてのパースを通ります。
@""の文字列や、R""の文字列、"""〜"""の文字列は、js{...}内であれば書くことができてしまいます。
execjsの.jsファイルなど、普通のJavaScriptの文法としては通用しないので注意が必要です。