有沒有辦法設置一個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 2009-12-05 09:33:43
'$#'在Perl 5.10中刪除:( – skaurus 2013-04-11 22:24:25
@SinanÜnürno,you can not!例子:'perl -E'$ _ = 155;說sprintf(「%。2f」,$ _/1000);''應該打印'0.16',但打印'0.15'(參見:http://stackoverflow.com/q/24493228/734304) – kobame 2014-07-01 09:44:26
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」,$ value)。
請看下面的例子: (6.02×1.25 = 7.525)
printf("%.2f", 6.02 * 1.25) = 7.52
printf("%.2f", 7.525) = 7.53
或者你可以使用以下方法來截斷小數點後第三位以後無論發生什麼事:
if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
$val = $1;
}
你想只有三位數,或小數點後三位數?有一個區別:) – 2010-01-26 00:13:20
有沒有辦法做到他們中的任何一個? – 2010-01-26 10:09:14