【问题标题】:bash printf not working - decimals [closed]bash printf 不起作用 - 小数 [关闭]
【发布时间】:2018-04-27 19:26:34
【问题描述】:

为什么 printf 对最终命令 printf "%s,%.2f\n" "$s","$a" 不起作用,额外的 0.00 是从哪里来的?

当我单独运行它们时,它们按预期工作,但在最终命令中没有。

$ s="giga,fifa"; a="8309.18694444444444444444"; echo "$s"; printf "%s\n" "$s"; echo -e "\n";  echo "$a"; printf "%.2f\n" "$a"; echo -e "\n"; echo "$s,$a"; printf "%s" "$s,"; printf "%.2f\n" "$a";echo;printf "%s,%.2f\n" "$s","$a"
giga,fifa
giga,fifa


8309.18694444444444444444
8309.19


giga,fifa,8309.18694444444444444444
giga,fifa,8309.19

giga,fifa,8309.18694444444444444444,0.00

我怎样才能得到这个输出:giga,fifa,8309.19 只有一个 printf 命令显示两个变量?

【问题讨论】:

    标签: linux bash floating-point formatting decimal


    【解决方案1】:

    您不要在 bash printf 中使用 ,,而是用空格分隔。 0.00 来自于尝试一次解析 "$s","$a",并且有奇怪的结果 - 所有内容都被视为一个参数并打印为第一个字符串,因此第二个不存在参数,并且默认替换为 0。这按预期工作:

    >printf "%s,%.2f\n" "$s" "$a"
    giga,fifa,8309.19
    

    【讨论】:

    • :) 哦,太好了!该死的逗号。这就是, 对这种行为的影响?
    • @ArunSangal 已添加 - 您基本上只有一个参数。 0 是第二个缺失参数的默认值。
    • 现在我知道为什么要添加逗号了,我首先查看了 BASH 的 printf cmd,然后查看了 awk 命令的 printf 并在我的脑海中留下了印记 ram,那里,我得到了这个错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 2016-04-18
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    相关资源
    最近更新 更多