「簡易数式計算」の版間の差分

MSY-07 (トーク | 投稿記録)
日付のフォーマットを変更
MSY-07 (トーク | 投稿記録)
with文の使用を中止、説明の修正
 
(同じ利用者による、間の6版が非表示)
3行目: 3行目:


== 機能 ==
== 機能 ==
* javascript の Math オブジェクトが対応している定数・関数が使用できます(例:pow, PI など)。
* JavaScript の Math オブジェクトが対応している定数・関数が使用できます(例:pow, PI など)。
** Math は省略できます。
** Math は省略できません。
* オプションを設定することで度数表記で記述できます(通常はラジアン指定)。
* オプションを設定することで度数表記で記述できます(通常はラジアン指定)。


19行目: 19行目:


== 変更履歴 ==
== 変更履歴 ==
* 2013-10-21 初版
* 1.0.0 (2013-10-21)
** 初版


== ソースコード ==
== ソースコード ==
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript" copy>
#title="簡易数式計算"
#title="簡易数式計算"
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// 簡易数式計算
// 簡易数式計算
// 選択文字列、またはカレント行を数式として処理し、結果を表示します。
// 選択文字列、またはカレント行を数式として処理し、結果を表示します。
// なお実体はただ javascript として実行しているだけです。
// なお実体はただ JavaScript として実行しているだけです。
//
//
// (C) ks
// (C) ks
44行目: 45行目:


function Main() {
function Main() {
  // =====================================================
// =====================================================
  // 追加の定数
// 追加の定数
  // =====================================================
// =====================================================
  // 円周率を 2 バイト文字にしてみる
// 円周率を 2 バイト文字にしてみる
  var π = Math.PI;
var π = Math.PI;
  // =====================================================
// =====================================================


  // =====================================================
// =====================================================
  // 標準関数の拡張
// 標準関数の拡張
  // =====================================================
// =====================================================
  // 有効桁位置指定版
// 有効桁位置指定版
  var rep = ["ceil", "floor", "round"];
var rep = ["ceil", "floor", "round"];
  for (var i=0; i<rep.length; i++) {
for (var i=0; i<rep.length; i++) {
    eval("var __$=Math.$;Math.$=function(n,d){return __$(n/Math.pow(10,d||0))*Math.pow(10,d||0)}".replace(/\$/g, rep[i]));
eval("var __$=Math.$;Math.$=function(n,d){return __$(n/Math.pow(10,d||0))*Math.pow(10,d||0)}".replace(/\$/g, rep[i]));
  }
}
  // 度数表記への置換
// 度数表記への置換
  // ついでに結果の補正
// ついでに結果の補正
  // Math.sin(Math.PI) が 0 にならないって……
// Math.sin(Math.PI) が 0 にならないって……
  var rep = ["sin", "cos", "tan", "asin", "acos", "atan"];
var rep = ["sin", "cos", "tan", "asin", "acos", "atan"];
  if ($DEGREE$) {
if ($DEGREE$) {
    for (var i=0; i<rep.length; i++) {
for (var i=0; i<rep.length; i++) {
      eval("var __$=Math.$;Math.$=function(d){return Math.round(__$(d/180*Math.PI), -12)}".replace(/\$/g, rep[i]));
eval("var __$=Math.$;Math.$=function(d){return Math.round(__$(d/180*Math.PI), -12)}".replace(/\$/g, rep[i]));
    }
}
  } else {
} else {
    for (var i=0; i<rep.length; i++) {
for (var i=0; i<rep.length; i++) {
      eval("var __$=Math.$;Math.$=function(d){return Math.round(__$(d), -12)}".replace(/\$/g, rep[i]));
eval("var __$=Math.$;Math.$=function(d){return Math.round(__$(d), -12)}".replace(/\$/g, rep[i]));
    }
}
  }
}
  // =====================================================
// =====================================================


  // =====================================================
// =====================================================
  // 追加の関数
// 追加の関数
  // =====================================================
// =====================================================
  // 16 進数化
// 16 進数化
  var Hex = function(d) {
var Hex = function(d) {
    return "0x" + d.toString(16).toUpperCase();
return "0x" + d.toString(16).toUpperCase();
  }
}
  // 階乗
// 階乗
  var fact = function(d) {
var fact = function(d) {
    var r = 1;
var r = 1;
    while (d > 1) {
while (d > 1) {
      r *= d--;
r *= d--;
    }
}
    return r;
return r;
  }
}
  // =====================================================
// =====================================================


  // 以下実行処理部
// 以下実行処理部
  var s = Document.Selection;
var s = document.Selection;
  var e = s.Text;
var e = s.Text;
  if (!e) {
if (!e) {
    e = Document.GetLine(s.GetActivePointY(mePosLogical), mePosLogical);
e = document.GetLine(s.GetActivePointY(mePosLogical), mePosLogical);
  }
}
  try {
try {
    with (Math) {
var r = eval(e);
      var r = eval(e);
Status = r;
      Status = r;
if ($COPY$) {
      if ($COPY$) {
ClipboardData.SetData(r);
        ClipboardData.SetData(r);
}
      }
} catch (e) {
    }
Status = e.message;
  } catch (e) {
}
    Status = e.message;
  }
}
}


Main();
Main();
</syntaxhighlight>
</syntaxhighlight>
スポンサーリンク