「簡易数式計算」の版間の差分
ナビゲーションに移動
検索に移動
<source>タグを<syntaxhighlight>タグに置き換える |
セクションの修正 |
||
| 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();
スポンサーリンク