#!/usr/bin/perl
use strict;
use warnings;
my $s = "1234567890.123456789";
{
no bignum; printf "bignum==%s\n", bignum::in_effect() // 0;
my $x = $s;
printf "%29s\n", $x;
printf "%29.9f\n\n", $x;
}
{
use bignum; printf "bignum==%s\n", bignum::in_effect() // 0;
my $x = $s;
printf "%29s\n", $x;
printf "%29.9f\n\n", $x;
}
我的 Perl 的 printf(为 darwin-thread-multi-2level 构建的 ActiveState v5.10.1)使用 %f 转换不尊重我超过 1e-6 位的值,即使使用 bignum:
$ t.pl
bignum==0
1234567890.123456789
1234567890.123456717
bignum==1
1234567890.123456789
1234567890.123456717
如何在不丢失精度的情况下打印我的输入?
我真正的问题是我需要操纵这个数字(例如,$x/0.000_000_001,或者更糟糕的是,$x/0.000_001_024,我不能用 substr() 函数调用来伪造它),但是在我进入“有趣”部分之前,目前的减排已经让我感到难过。