現在、小数点区切り記号は何ですか?

現在、小数点区切り記号は何ですか?

POSIXシェルスクリプトがあるとしましょう。

  1. 私が制御できない他のシステム/環境で実行する必要があります。
  2. ロケール尊重プログラムからエクスポートされた文字列から小数点区切り文字を削除する必要があります。

最も一般的な方法で小数点区切りを検出する方法は?

答え1

尋ねるlocale:

locale decimal_point

現在のロケールを使用して小数点を出力します。

千単位の区切り記号が必要な場合:

locale thousands_sep

リクエストすると、すべての数値キーワードを表示できます。LC_NUMERICカテゴリー:

locale -k LC_NUMERIC

答え2

これがシェルスクリプトの場合は、モジュールで特別な連想配列を使用zshできます。$langinfozsh/langinfo

zmodload zsh/langinfo
radix=$langinfo[RADIXCHAR]

(標準にマップされていますnl_langinfo(RADIXCHAR)man nl_langinfo詳細についてはシステムを参照してください。$langinfo[THOUSEP]千単位の区切り記号はそのシステムを参照してください。)

組み込みコマンドを使用して、別のプロセスをフォークすることなくこれを取得できますbashzshprintf

printf -v radix %.1f 1 && radix=${radix:1:1}

ksh93シェルを使用して数値をユーザーロケール形式からCロケール形式に変換するには、次の手順を実行できます。

$ locale title
German locale for Germany
$ x=1.123.456,78 ksh -c 'typeset -F x="$x"; LC_ALL=C; printf "%.23g\n" "$x"'
1123456.78

関連情報