perlfaq4の回答からDoes Perl has a round() function?への回答 ceil() と floor() はどうですか? トリガー関数?
:
int() は単に 0 に向かって切り捨てることに注意してください。特定の桁数に丸めるには、通常、sprintf() または printf() が最も簡単な方法です。
printf("%.3f", 3.1415926535); # prints 3.142
POSIX モジュール (標準 Perl ディストリビューションの一部) は、ceil()、floor()、およびその他の多数の数学関数と三角関数を実装しています。
use POSIX;
$ceil = ceil(3.5); # 4
$floor = floor(3.5); # 3
5.000 から 5.003 の perl では、三角法は Math::Complex モジュールで行われていました。5.004 では、Math::Trig モジュール (標準 Perl ディストリビューションの一部) が三角関数を実装しています。内部的には Math::Complex モジュールを使用し、一部の関数は実軸から複素平面に分割できます。たとえば、2 の逆正弦です。
金融アプリケーションでの丸めは深刻な影響を与える可能性があるため、使用する丸め方法を正確に指定する必要があります。このような場合、Perl が使用しているシステムの丸めを信頼するのではなく、必要な丸め関数を自分で実装するのがおそらく得策です。
理由を確認するには、中間点の交替で問題が発生することに注意してください。
for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
0.8 0.8 0.9 0.9 1.0 1.0
Perlのせいにしないでください。C と同じです。IEEE は、これを行う必要があると言っています。絶対値が 2**31 未満の整数 (32 ビット マシン上) である Perl の数値は、数学的な整数とほとんど同じように機能します。他の数値は保証されません。