nashornでtoLocaleString()が使えない件
こんにちは、開発担当の Masa です。
先日、Javascript(nashornスクリプトエンジン使用)で数値をカンマ区切りの文字列に変換しようとして「toLocaleString()」を使ったのですが、残念ながら機能しませんでした。
正規表現で対応した話と、「rhino」「GraalJS」は対応しているのかについて調べた結果をお話します。
Javascript で数値をカンマ区切りの文字列に変換する一番簡単な方法は「toLocaleString()」を使うことです。
print(Number(123456789).toLocaleString() + '円');
Java 17 + nashorn 15.3 で実行したところ、結果は「123456789円」。
「NativeNumber#toLocaleString」のコードを見るとそのまま文字列にして返してるだけなので、当然の結果ですね。
仕方がないので正規表現で対応しました。
print('123456789'.replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,') + '円');
無事「123,456,789円」になりました。
「rhino」「GraalJS」の対応状況ですが、「GraalJS」は使えました。
実行時の環境は Java 17 + GraalJS 23.0 です。
「rhino」は「nashorn」と同じで対応していません。
「NativeNumber#execIdCall」のコードを見るとそのまま文字列にして返してるだけですね。
実行時の環境は Java 17 + rhino 1.7.14 です。