代码之家  ›  专栏  ›  技术社区  ›  Charles E. Grant

为什么Perl的printf会输出格式说明符而不是格式化的数字?

  •  3
  • Charles E. Grant  · 技术社区  · 15 年前

    我正在尝试调试远程用户站点上的问题。我们已经将范围缩小到Perl中格式化输出的问题。用户上下发誓

    perl -e 'printf "Number: %lG\n", 0.1'
    

    印刷品

    Number: %lG
    

    Number: 0.1
    

    用户报告他们的Perl是5.8版。我现有的最老版本是5.8.1,它的行为似乎是正确的。

    有猜测吗?配置错误?模块冲突?

    3 回复  |  直到 15 年前
        1
  •  7
  •   daxim Fayland Lam    15 年前

    sprintf

    printf sprintf(3) printf(3)

    %l 不是它的一部分。我猜远程用户没有使用GNU。他可以通过键入 man 3 sprintf man 3 printf .

        2
  •  4
  •   paxdiablo    15 年前

    只有当它不识别格式说明符时,它才应该这样做。例如:

    pax> perl -e 'printf "Number: %q\n", 0.1'
    Number: %q
    

    我认为你必须在网站上解决这个问题,尽管你可能想先让他们剪切粘贴文本和屏幕转储,例如, HyperSnap 演示,发送到电子邮件中,以便您仔细查看。我只建议一个,因为我们内部使用它,它有一个免费的试用。你可以使用任何你喜欢的像样的截屏程序。

    我原以为他们可能在打字 1G (吴仪)而不是 lG 但前者仍然有效。

    我确实注意到了 IG (eye jee)将打印出文本而不是数字,但是,除非他们使用的字体特别差,否则这应该是可识别的区别。

        3
  •  2
  •   daxim Fayland Lam    15 年前
    perl -V:d_longdbl
    

    perldoc sprintf


    q ll L l

    printf

    printf("The number is %lG\n", 0.001);
    printf("The number is %LG\n", 0.001);
    

    0.001

    printf("The number is %LG\n", 0.001L);