逆引きFormula 2.0 に戻る
しーさんからのお題です。早速やってみましょう。
https://twitter.com/Sealabo19/status/1695226068951863496
最も簡単なのはreplace を再帰的に使うことで下から,を埋めていく感じです。
let(num_str,
/* 数値を文字列に変換 */
prop("数値").format()
/* 末尾の4桁の数字の間に,を挿入 */
.replace("(\\d)(\\d{3})$", "$1,$2")
/* その前の4桁の数字の間に,を挿入 */
.replace("(\\d)(\\d{3}),", "$1,$2,")
/* その前の4桁の数字の間に,を挿入 */
.replace("(\\d)(\\d{3}),", "$1,$2,")
/* その前の4桁の数字の間に,を挿入 */
.replace("(\\d)(\\d{3}),", "$1,$2,")
/* その前の4桁の数字の間に,を挿入 */
.replace("(\\d)(\\d{3}),", "$1,$2,")
/* その前の4桁の数字の間に,を挿入 */
.replace("(\\d)(\\d{3}),", "$1,$2,"),
"¥" + num_str
)
長さを3の倍数にして replaceAll を使うこともできます。
/* 数値の先頭に3つの@を付加(自動的に文字列に変換) */
("@@@" + prop("数値"))
/* 3の倍数の長さになるように substring で切り出し */
.substring(prop("数値").length() % 3)
/* 頭から3桁ごとに, を付加 */
.replaceAll("(.{3})", "$1,")
/* 頭の@と,(ある場合だけ)を¥マークに置換 */
.replace("^@+,?", "¥")
/* 末尾の , を削除 */
.replace(",$", "")