1. ホーム
  2. perl

[解決済み] Perlで浮動小数点数を丸めるには?

2022-01-29 12:55:10

質問

10進数(浮動小数点)を最も近い整数に丸めるにはどうしたらよいですか?

1.2 = 1
1.7 = 2

解決方法は?

の出力 perldoc -q round

Perlにround()関数はあるのか? ceil()やfloor()は? Trig関数は?

次のことを忘れないでください。 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パールでは、三角測量は 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がそうしろと言っているのだ。 これを の下にある絶対値が整数のPerlの数値。 2**31 (但し 32ビットマシンでは、数学的な整数とほぼ同じように動作します。 それ以外の数値は保証されません。