逆引きFormula 2.0 に戻る

しーさんからのお題です。早速やってみましょう。

https://twitter.com/Sealabo19/status/1695226068951863496

  1. 最も簡単なのは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
    )
    
  2. 長さを3の倍数にして replaceAll を使うこともできます。

    /* 数値の先頭に3つの@を付加(自動的に文字列に変換) */
    ("@@@" + prop("数値"))
      /* 3の倍数の長さになるように substring で切り出し */
      .substring(prop("数値").length() % 3)
      /* 頭から3桁ごとに, を付加 */
      .replaceAll("(.{3})", "$1,")
      /* 頭の@と,(ある場合だけ)を¥マークに置換 */
      .replace("^@+,?", "¥")
      /* 末尾の , を削除 */
      .replace(",$", "")
    

金額