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

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
<source>タグを<syntaxhighlight>タグに置き換える
MSY-07 (トーク | 投稿記録)
セクションの修正
1行目: 1行目:
= 概要 =
== 概要 ==
選択文字列,またはカレント行を計算式として処理し,結果を表示します.
選択文字列,またはカレント行を計算式として処理し,結果を表示します.


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


== 追加の定数 ==
=== 追加の定数 ===
* π:円周率(PI のエイリアス)
* π:円周率(PI のエイリアス)


== 追加の関数 ==
=== 追加の関数 ===
* Hex:引数を 16 進数表記で返す
* Hex:引数を 16 進数表記で返す
* fact: 階乗
* fact: 階乗


== オプション ==
=== オプション ===
* $COPY$:結果をクリップボードにコピー(デフォルトオフ)
* $COPY$:結果をクリップボードにコピー(デフォルトオフ)
* $DEGREE$:角度を度数で指定する(デフォルトオフ)
* $DEGREE$:角度を度数で指定する(デフォルトオフ)


= 履歴 =
== 履歴 ==
* 2013/10/21 初版
* 2013/10/21 初版


= コード =
== コード ==
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
#title="簡易数式計算"
#title="簡易数式計算"

2023年5月17日 (水) 00:54時点における版

概要

選択文字列,またはカレント行を計算式として処理し,結果を表示します.

機能

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

追加の定数

  • π:円周率(PI のエイリアス)

追加の関数

  • Hex:引数を 16 進数表記で返す
  • fact: 階乗

オプション

  • $COPY$:結果をクリップボードにコピー(デフォルトオフ)
  • $DEGREE$:角度を度数で指定する(デフォルトオフ)

履歴

  • 2013/10/21 初版

コード

#title="簡易数式計算"
// -----------------------------------------------------------------------------
// 簡易数式計算
// 選択文字列,またはカレント行を数式として処理し,結果を表示します.
// なお実体はただ javascript として実行しているだけです.
//
// (C) ks
// http://merysmacro.seesaa.net/
// -----------------------------------------------------------------------------

// =========================================================
// オプション指定
// =========================================================
// 結果をクリップボードにコピー
var $COPY$ = false;

// 度数指定
var $DEGREE$ = false;
// =========================================================

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

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

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

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

Main();
スポンサーリンク