Есть ли способ установить точность с плавающей запятой Perl (до 3 цифр), не изменяя ее специально для каждой переменной?Как установить точность с плавающей запятой в Perl?
Нечто похожее на Tcl:
global tcl_precision
set tcl_precision 3
Есть ли способ установить точность с плавающей запятой Perl (до 3 цифр), не изменяя ее специально для каждой переменной?Как установить точность с плавающей запятой в Perl?
Нечто похожее на Tcl:
global tcl_precision
set tcl_precision 3
Там нет никакого способа, чтобы глобально изменить это.
Если это только для целей отображения, используйте sprintf("%.3f", $value);
.
Для математических целей используйте (int(($value * 1000.0) + 0.5)/1000.0)
. Это будет работать для положительных чисел. Однако вам нужно будет изменить его для работы с отрицательными числами.
Если это просто для показа, то установите '$ # = '%. 3f'' - см.' Perldoc perlvar' – mob
'$ #' удален в Perl 5.10 :( – skaurus
@ SinanÜnür no, вы не можете! Пример: 'perl -E '$ _ = 155, скажем, sprintf ("%. 2f", $ _/1000); '' Должен печатать '0.16', но печатает' 0.15' (см. Http://stackoverflow.com/q/24493228/734304) – kobame
Использование Math::BigFloat
или bignum
:
use Math::BigFloat;
Math::BigFloat->precision(-3);
my $x = Math::BigFloat->new(1.123566);
my $y = Math::BigFloat->new(3.333333);
Или с bignum
вместо делать:
use bignum (p => -3);
my $x = 1.123566;
my $y = 3.333333;
Тогда в обоих случаях:
say $x; # => 1.124
say $y; # => 3.333
say $x + $y; # => 4.457
Я бы не рекомендовал использовать Sprintf («% .3f», значение $).
Пожалуйста, посмотрите на следующий пример: (6,02 * 1,25 = 7,525)
printf("%.2f", 6.02 * 1.25) = 7.52
printf("%.2f", 7.525) = 7.53
Лечить результат в виде строки и использовать substr
. Например:
$result = substr($result,0,3);
Если вы хотите сделать округление, сделайте это как строку тоже. Просто получите следующего персонажа и решите.
Или вы можете использовать следующий укоротить все, что приходит после третьего знака после запятой:
if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
$val = $1;
}
Вы хотите только три цифры, или три цифры после запятой? Есть разница :) –
есть ли способ сделать любой из них? –