我正在使用awkc
从awk脚本生成可执行文件。我在awk脚本中有以下行abc.awk:
BEGIN{printf "Value=%s\n",(3.13+3.26)}
我已经生成了一个可执行文件(abc.exe),我已经在不同的系统上执行了该文件。它在浮点运算中提供不同的输出。
在一个本地系统上,它提供输出6.39
,但它在另一个位于不同时区的系统上提供输出6
。
当我在各个站点搜索时,我能够看到设置LANG环境变量,但是如何?
答案 0 :(得分:0)
我不确定这与您的不同系统上的区域设置有关,但如果您要查找浮点数,则应使用"%f"
格式说明符。要获得2位小数的答案,请使用"%.2f"
:
BEGIN{printf "Value=%.2f\n",(3.13+3.26)}
无论运行何种系统,都应该得到相同的结果。
根据链接的问题 修改,也许您应该尝试使用LC_NUMERIC=C
来明确设置区域设置:
LC_NUMERIC=C awk 'BEGIN{printf "Value=%.2f\n",(3.13+3.26)}'
无论运行什么系统,都应该有效。
答案 1 :(得分:0)
如果将程序交给其他人,环境变量通常是您无法控制的。我会在你的printf
- 电话中考虑更具体。您可以将数字格式化为字符串,以达到令人惊讶的细节。您可能正在寻找float
(%f
)(您现在正在使用string
(%s
)。
如果您注意到printf
- 调用始终使用相同的技巧,则可以在BEGIN块中使用变量CONVFMT
控制数字到字符串的转换设置。我通过gawk
介绍了这个,显然它是在POSIX标准中。我不知道awkc
是否支持这一点。
来自gawk manual:
此字符串控制数字到字符串的转换(请参阅 转换)。它通过实际上作为第一个传递 sprintf()函数的参数(参见字符串函数)。它的默认值 值为“%。6g”。 CONVFMT由POSIX标准引入。