gbo*_*ffi 31 shell posix locale floating-point
假设我有一个 POSIX shell 脚本
如何以最通用的方式检测小数点分隔符?
Ste*_*itt 46
问locale:
locale decimal_point
Run Code Online (Sandbox Code Playgroud)
这将使用当前区域设置输出小数点。
如果您需要千位分隔符:
locale thousands_sep
Run Code Online (Sandbox Code Playgroud)
您可以通过请求查看所有的数字关键字的LC_NUMERIC类别:
locale -k LC_NUMERIC
Run Code Online (Sandbox Code Playgroud)
如果这是一个zshshell 脚本,你可以$langinfo在zsh/langinfo模块中使用特殊的关联数组:
zmodload zsh/langinfo
radix=$langinfo[RADIXCHAR]
Run Code Online (Sandbox Code Playgroud)
(映射到标准nl_langinfo(RADIXCHAR),man nl_langinfo有关详细信息,请参阅您的系统;$langinfo[THOUSEP]对于千位分隔符)。
在bash脚本中(也可以在 中工作zsh),您应该能够在不使用printf内置程序分叉单独进程的情况下获得它:
printf -v radix %.1f 1 && radix=${radix:1:1}
Run Code Online (Sandbox Code Playgroud)
要将数字从用户的语言环境格式转换为 C 语言环境格式,使用 ksh93 shell,您可以这样做:
$ 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3734 次 |
| 最近记录: |