【问题标题】:PHP printf adds something after formatted stringPHP printf 在格式化字符串后添加了一些东西
【发布时间】:2012-12-08 09:30:53
【问题描述】:

当我使用 printf 时,

printf("%.2f zł", 20.4);

返回

20.40 zł9

但我想要

20.40 zł

当我使用sprintf("%.2f zł", 20.4) 时没有问题。

是波兰货币符号。当我用“l”替换“ł”时,我仍然有这样的问题,所以看起来这与编码无关。

如何正确使用 printf 表示货币?

【问题讨论】:

  • 看起来不是codepad.org/dAWs6yDQ
  • printf("%.2f %s", 20.4, 'zł'); 会产生同样奇怪的输出吗?我会测试,但由于某种原因我无法将 unicode 粘贴到我的 shell 中......
  • @Charles 是的,当我添加“zł”作为参数时,它会产生相同(错误)的输出。
  • 考虑使用number_format(),您可以在其中更改小数和千位分隔符以根据波兰标准进行调整。
  • 感谢@dev-null-dweller,我使用了 number_format() 并且效果很好。我也可以使用“polish”分数分隔符(“,”而不是“.”)。

标签: php printf


【解决方案1】:

我明白了。

我写道:

echo printf(...);

而不仅仅是:

printf(...);

在 printf() 生成的字符串之后,我得到了字符串长度,这是 printf 返回的值(实际上 - 在 123.45 值的情况下添加的数字是 9,在 20.4 的情况下是数字 8)。

【讨论】:

  • 啊,很好的发现! printf() 的返回类型不太为人所知。不过,它似乎是documented
  • 我通过研究 printf 和 sprintf 之间的差异找到了它(sprintf 不返回长度)。
【解决方案2】:

您确定 9 不是不同打印的结果,在您的代码中进一步发生吗?尝试注释掉这个 printf 行,看看 9 是否还在。

如果用常规 L 替换波兰语字符不能解决问题,则您正确评估它不是编码问题。

我能想到的printf()sprintf()之间的唯一区别似乎是它们返回结果的方式:printf输出到HTML缓冲区,而sprintf返回一个字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2020-05-15
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多