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

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
オブジェクト名の修正(マクロリファレンス:3:Document オブジェクトを参照)
MSY-07 (トーク | 投稿記録)
with文の使用を中止、説明の修正
 
4行目: 4行目:
== 機能 ==
== 機能 ==
* JavaScript の Math オブジェクトが対応している定数・関数が使用できます(例:pow, PI など)。
* JavaScript の Math オブジェクトが対応している定数・関数が使用できます(例:pow, PI など)。
** Math は省略できます。
** Math は省略できません。
* オプションを設定することで度数表記で記述できます(通常はラジアン指定)。
* オプションを設定することで度数表記で記述できます(通常はラジアン指定)。


99行目: 99行目:
}
}
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) {
} catch (e) {

2025年11月26日 (水) 17:17時点における最新版

概要[編集]

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

機能[編集]

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

追加の定数[編集]

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

追加の関数[編集]

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

オプション[編集]

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

変更履歴[編集]

  • 1.0.0 (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 {
		var r = eval(e);
		Status = r;
		if ($COPY$) {
			ClipboardData.SetData(r);
		}
	} catch (e) {
		Status = e.message;
	}
}

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