Должно быть относительно просто реализовать переопределение этой функции, чтобы вести себя так, как вам нужно.
Код плагина почти тривиален в том, что он делает. Возьмите его копию из того места, где вы его установили, и сделайте его частью своей кодовой базы, чтобы ваша версия была той, которая будет найдена во время компиляции, т.е.
Myapp/lib/Template/Plugin/Number/Format.pm
отредактируйте его таким образом:
-use Number::Format;
+use Number::Format::NoZeroCents;
Затем добавьте новый модуль в свой код:
Myapp/lib/Number/Format/NoZeroCents.pm;
это выглядит так:
package Number::Format::NoZeroCents;
use strict;
use warnings;
use base 'Number::Format';
sub format_price {
my $self = shift;
my ($number, $precision, $symbol) = @_;
if(defined $precision){ #default behaviour
printf STDERR "%s: default behaviour for %s\n", __PACKAGE__, join(';',@_);
return $self->SUPER::format_price(@_)
}
else {
$precision = 0 if $number == int($number);
printf STDERR "%s: override behaviour for %s\n", __PACKAGE__, $number;
return $self->SUPER::format_price($number, $precision, $symbol)
}
}
1;
И это должно означать, что ваш подход NoZeroCents используется по умолчанию во всем вашем коде, но вы можете переопределить его, вызвав [% number | format_price(2) %]
, когда вы хотите, чтобы отображалось значение $100.00.
ОБНОВЛЕНИЕ
Number::Format определенно поступает правильно, когда ему говорят использовать точность => 0, что подтверждает этот быстрый тест:
#!/usr/bin/env perl
use strict;
use warnings;
use Number::Format qw(format_price);
my $v = 100.00;
printf "Original value as string '%s'; as number '%f'; as fp '%s'; as fp0: '%s'\n",
$v, $v, format_price($v), format_price($v,0);
который производит:
Original value as string '100'; as number '100.000000'; as fp 'AUD 100.00'; as fp0: 'AUD 100'
person
RET
schedule
05.02.2013
format_price($precision) : Returns a string containing "$number" formatted similarly to "format_number()", except that the decimal portion may have trailing zeroes added ...
Есть ли какая-то конкретная причина, по которой вы не можете использоватьformat_number
вместо этого? - person TLP   schedule 05.02.2013