현재 소수 구분 기호는 무엇입니까?

현재 소수 구분 기호는 무엇입니까?

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]천 단위 구분 기호는 해당 시스템을 참조하세요.)

내장 명령을 사용하여 별도의 프로세스를 포크 하지 않고도 이를 얻을 수 있습니다 bash.zshprintf

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

관련 정보