gboffi Asked: 2019-09-13 01:40:53 +0800 CST2019-09-13 01:40:53 +0800 CST 2019-09-13 01:40:53 +0800 CST 当前的小数分隔符是哪个? 772 假设我有一个 POSIX shell 脚本 需要在我无法控制的不同系统/环境上运行,并且 需要从尊重语言环境设置的程序发出的字符串中删除小数点分隔符。 如何以最一般的方式检测小数分隔符? shell 2 个回答 Voted Best Answer Stephen Kitt 2019-09-13T02:17:32+08:002019-09-13T02:17:32+08:00 问locale: locale decimal_point 这将使用当前的语言环境设置输出小数点。 如果您需要千位分隔符: locale thousands_sep 您可以通过LC_NUMERIC请求类别查看所有数字关键字: locale -k LC_NUMERIC Stéphane Chazelas 2019-09-13T02:36:03+08:002019-09-13T02:36:03+08:00 如果那是一个zshshell 脚本,你可以在模块中使用$langinfo特殊的关联数组:zsh/langinfo zmodload zsh/langinfo radix=$langinfo[RADIXCHAR] (映射到标准nl_langinfo(RADIXCHAR),有关详细信息,请参阅man nl_langinfo您的系统;$langinfo[THOUSEP]对于千位分隔符)。 在bash脚本中(也可以在 中工作zsh),您应该能够在不使用printf内置函数分叉单独进程的情况下获得它: printf -v radix %.1f 1 && radix=${radix:1:1} 要将数字从用户的语言环境格式转换为 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
问
locale
:这将使用当前的语言环境设置输出小数点。
如果您需要千位分隔符:
您可以通过
LC_NUMERIC
请求类别查看所有数字关键字:如果那是一个
zsh
shell 脚本,你可以在模块中使用$langinfo
特殊的关联数组:zsh/langinfo
(映射到标准
nl_langinfo(RADIXCHAR)
,有关详细信息,请参阅man nl_langinfo
您的系统;$langinfo[THOUSEP]
对于千位分隔符)。在
bash
脚本中(也可以在 中工作zsh
),您应该能够在不使用printf
内置函数分叉单独进程的情况下获得它:要将数字从用户的语言环境格式转换为 C 语言环境格式,使用 ksh93 shell,您可以这样做: