|
>文書中に、「小数点以下の桁数が不揃い」な数値が幾つもあるとき、
> ......
>(3) 小数点以下は、少なくとも任意の[1〜3]桁で処理できるものであること 他です
JavaScriptがマクロとして利用できるバージョンの秀丸なら以下みたいなのでいける
んじゃないでしょうか。
以下、 aaaaa.mac などとして保存して実行。
js {
// 計算関数そのものの配列
var math_method_arr = [Math.round, Math.ceil, Math.floor];
// メニューで選択するための日本語の配列
var math_method_jp_arr = ["四捨五入", "切り上げ", "切り捨て"];
// メニュー項目として選択
var select_math_method_item = menuarray(math_method_jp_arr);
// 何も選ばなかったら四捨五入を計算関数とする
var math_method = Math.round;
// なにか選んでいたら、計算関数としてそれを採用する
if (select_math_method_item > 0) {
var selected_method_index = select_math_method_item-1; // 1からの数値を0
からに直す
math_method = math_method_arr[selected_method_index];
}
var fixed = 2;
var keta_menu_arr_jp = ["1桁", "2桁", "3桁", "4桁", "5桁", "0桁"];
var select_keta_item = menuarray(keta_menu_arr_jp); // 小数点以下何桁なの?
if (select_keta_item > 0) {
var selected_keta_index = select_keta_item-1; // 1からの数値を0からに直す
var keta_num = parseInt(keta_menu_arr_jp[selected_keta_index]);
if (keta_num >= 0) {
fixed = keta_num; // 数値として但しそうなら採用
}
}
// 選択テキストがあればそれ、なければ全体 (矩形選択は含まず)
var text = hidemaru.getSelectedText() || hidemaru.getTotalText();
debuginfo(2);
function roundNumber(num, decimalPlaces, func) {
var factor = Math.pow(10, decimalPlaces);
num = func(num * factor) / factor;
return num;
}
var regex = /(\d+\.\d+)/g;
// 対象の文字列に対して「発見」と「置き換え」を反復する
var replaced_text = text.replace(regex, function(all, float_num) {
var modify_float_num = roundNumber(float_num, fixed, math_method); // 指定
の方法と指定の桁数でまるめ
modify_float_num = modify_float_num.toFixed(fixed); // 桁数が足りてない時
のために桁数表記を揃えておく
console.log(float_num + "⇒" + modify_float_num + "\r\n"); // これはデバッ
グ表示
return modify_float_num; 少数
});
disabledraw();
// テキスト選択中なら、そこに挿入すれば良い。
if (selecting()) {
insert(replaced_text);
// 選択中でないなら全部選択して、挿入。
} else {
selectall();
insert(replaced_text)
}
enabledraw();
}
|
|