5
my $num = log(1_000_000) / log(10);
print "num: $num\n";
print "int(num): " . int($num) . "\n";
print "sprintf(num): " . sprintf("%0.16f", $num) . "\n";

产生:

num: 6
int(num): 5
sprintf(num): 5.9999999999999991

perl打印浮点数的精度是多少?

使用:为 x86_64-linux-thread-multi 构建的 v5.8.8

4

1 回答 1

10

在对浮点数进行字符串化时,无论是否打印,Perl 通常使用编译它的 float.h 或 limits.h 文件中的 DBL_DIG 或 LDBL_DIG 的值。

这通常是浮点类型的精度,perl 将使用向下舍入。例如,如果使用典型的 double 类型,精度为 53 位 = 15.95 位,Perl 通常会以 15 位精度进行字符串化。

于 2012-12-31T17:59:14.510 回答