一括表示

− 野ざらし言 −

[5341] 消費税の加算

めざら 2023/03/13(Mon) 22:32
http://mezala.la.coocan.jp/
カーソル位置の数値に税を加算して書き換えるためのマクロです。
Emmettさんの LXcash.def で小遣い帳をつけていまして,
同じレシートでも科目が異なるものがあるときは分けて記録するのですが,
商品ごとに税額が打たれているわけではないので,面倒だったんですね。

起動キーがないのは,テキストを自動で書き換えるマクロであることから,
不用意に単独で起動しないよう他のマクロからコールするようにしたからです。

= consTax.def = by H_ear
#if 0
カーソル位置の数値を取得して消費税率を掛けた数値に書き換える
通常実行で軽減税率,シフト実行で重税率(逆の設定可)
小数点以下は切り捨てがデフォルト(四捨五入の設定可)
カンマ区切りを半自動認識(3桁から4桁をまたぐ変換のみ対応)(仕様)
#endif
* mad for vz!
1 "" ?.
	k1&ks,				;税率の選択 %k
;====^ カスタマイズ項目
	a0,	;; シフト実行時の税率 0:重税率 1:軽減税率 %a
	b0,	;; 四捨五入の設定 0:無効 1:有効 %b
;;	c0,	;; 3桁から4桁になる場合のカンマ区切りの有無 0:無 1:有 %c
;====$ ここまで
	d=",0123456789",
	(cd==$20 || ct==1)?{		;数字の直後なら位置を調整
		#s &SF(d,cd)		;戻り値はアドレス(先頭カンマ)
		(r==0 || r==d)?{ #d >q };ジャンプは使いたくないが…
	}
	&SF(d,cd) (r)??{ :q &m("数字ではない.") . }
	mp[, ps[=pa,			;直接pwに取得できるが汎用性を考慮
	&01 pw[=p=r, i-,
	; ---- get str ----
	(-1){ #d &SF(d,cd) (r)??{} } #b
	(-1){ #s &SF(d,cd) (r)??{ #d } } #G
	; ---- get num
	#J #I				;作業窓で加工・取得
 :l	#s (cd==',')?{ #g i++, } (lx)?>l;ここもう少しスマートにしたい
	&n r[, #[ n],
	; ---- add tax ----
	(k)?k110, ?k108,		;軽減税率と重税率 %k %a
	&Im(p,0) &Ia(p,n)
	&Im(p,k) &Id(p,100) m=r,
	n=p..0,
	(b)?{ (m>49)?n++, }		;四捨五入の場合 %b
	(i==0 && n>999)?{ #s #s }	;桁の繰り上がり %c
	mi[+, (p..1)?{ &?("%,lu",n,p..1) }?{ &?("%,u",n) } mi],
 :z	; ---- exit ----
	pw], ps], mp],
	&d #] .
;;00:	; ---- look result ----
;	&m("Result: %d %u $%x '%c' $"%16s$"",r,r,r,r,r)
01:	; ---- buffer ----
	(5+$)."$(10,0)$[16]"
;;02:	; ---- sub routine ---
	;<-- r = 
	;--> r = 
	
*
[Variables]
	a	加算する税率フラグ(シフト実行時分岐用)
	b	四捨五入の設定フラグ
	c	カンマ区切りの有無フラグ(未使用)
	d	数値文字列の先頭アドレス
	i	カウンタ(カンマ数)想定する用途と相違あり
	k	シフトキーフラグ→軽減税率/重税率
	m	mod 剰余(四捨五入有効時使用)
	n	取得数値→課税後数値
	p	ロング演算用ポインタアドレス
[Buffers]
	pa	as ps
	[local]	as pw / long int.(4bytes)
[History]
2023/03/13 0.10 
[Notes]
もっと無駄なくできるはずだが…

確かに無駄が多いように思うが,昔みたいに頑張って短くしなくても…とも思う。

↑ このページの先頭