浮動小数点数が原因で、Perl (v5.10.1) での計算に問題があります。
#!/usr/bin/perl
use strict;
use warnings;
use POSIX;
my $x1 = 1500;
my $x0 = 1000;
my $dx = 100/3;
print "($x1-$x0)/$dx \n"; #(1500-1000)/33.3333333333333
print my $a=(($x1-$x0)/$dx), "\n"; #15
print my $b=floor(($x1-$x0)/$dx), "\n"; #14
print my $c=floor($a), "\n"; #14
print floor(15), "\n"; #15
print my $d=floor(sprintf("%.0f", ($x1-$x0)/$dx)), "\n"; #15
出力が 14 になることがあるのはなぜですか? に示されているように値 15 が保存されている$a
ので、値 15 で使用さfloor
れていませんか? と の比較は$a
、$c
私を本当に困惑させます...
これを読んだのですが、よくわかりません。sprintf
また、私の意見ではあまり便利ではない回避策も見つけました。