数値がfloating pointの有限数であるのに対し、実数は無数にありますが、変更することはできません。
変更を行わずに常に文字列として読み取り、印刷することができます。しかし、あなたが算術演算を実行する瞬間、あなたは浮動小数点の土地にいます。
あなたには2つの選択肢があります。1.数字はprintf/sprintfを使用してデフォルトより多く数字を使用して印刷できます。または2.任意精度の算術演算を使用できます。後者ははるかに遅くなるため、変数の初期化方法を慎重に検討する必要があります。
#!/usr/bin/env perl
use strict;
use warnings;
my %n = (
x => 200.1564867256545456457,
y => 3352.25654454545454,
);
printf "%s = %.18f\n", $_, $n{$_} for qw/x y/;
出力:
x = 200.156486725654531256
y = 3352.256544545454289619
これは、ほとんどの実数は、浮動小数点数を使って表現することができないという事実を示しています。 Math::BigFloatを使用
:
#!/usr/bin/env perl
use strict;
use warnings;
use Math::BigFloat;
Math::BigFloat->accuracy(24);
my %n = (
x => Math::BigFloat->new('200.1564867256545456457'),
y => Math::BigFloat->new('3352.25654454545454'),
);
print "$_ = $n{$_}\n" for qw/x y/;
出力:
x = 200.156486725654545645700
y = 3352.25654454545454000000
数学::ラウンド[参照](http://search.cpan.org/dist/Math-Round/Round.pm) – ssr1012