我有这个变量:

$out .= $indent . sprintf("{$total_space}%-{$column_total}s{$space}%{$price_width}s$newline", ___('Tax'), Am_Currency::render($this->{$prefix . '_tax'}, $this->currency));

暂时等于4000。我需要将其格式化为:4,000,因此我将代码更改如下:

$out .= $indent . sprintf("{$total_space}%-{$column_total}s{$space}%{$price_width}s$newline", ___('Tax'), Am_Currency::render(number_format($this->{$prefix . '_tax'}), $this->currency));

但是,我不知道为什么,但是我得到了4。 其他零发生了什么? 我尝试使用不同的值,例如1214.92,在所有情况下,输出都省去了最后3位数字。

这是渲染功能:

static function render($value, $currency = null, $locale = null)
    {
        return (string)self::create($value, $currency, $locale);
    } 

 public function __toString()
    {
        $format = array_key_exists($this->currency, $this->formats) ? 
            $this->formats[$this->currency] :
            '%.2f %s';
        return sprintf($format, $this->value, $this->currency);
    }

我什至尝试通过更改上面的代码来像这样:

        return sprintf($format, number_format($this->value), $this->currency);

但这也没有用。 你能告诉我怎么了吗? 这真让我震惊!

谢谢。

===============>>#1 票数:0

您的sprintf格式将覆盖您的number_format函数...同时使用这两者没有任何意义(至少对于您的字符串中的相同数字而言)。 如果您number_format使用number_format ,则会看到它正确格式化了。

我建议改用money_format函数,例如:

//money format
setlocale(LC_MONETARY, 'en_US');
...
return money_format('%.2n', $this->value);

http://www.php.net/manual/zh/function.money-format.php

  ask by Cain Nuke translate from so

未解决问题?本站智能推荐: