整数ではなく長いデータ型を必要とするアプリを Perl で作成しています。どうすればこれを達成できますか。例えば;
my $num = sprintf('%ld', 27823221234);
print $num;
出力は long ではなく整数です。
整数ではなく長いデータ型を必要とするアプリを Perl で作成しています。どうすればこれを達成できますか。例えば;
my $num = sprintf('%ld', 27823221234);
print $num;
出力は long ではなく整数です。
オプションは次のとおりです。
更新: ああ、整数の代わりに浮動小数点数を使用することもできます:
printf("%.0f", 2**50)
IIRC、現在のほとんどのアーキテクチャでは、浮動小数点数は 2**54-1 までの整数を正確に表すことができます。
あなたの場合、 27823221234 は実際には double として表されるため、sprintf にフィードしようとすると -1 を受け取ります
my $x = 27823221234;
my $num = sprintf('%lf', $x);
print $num, "\n";
に屈する
27823221234.000000
大きな整数で数学演算を行いたい場合は、Math::Bigint モジュールの使用を検討してください。
あなたはおそらく混乱しています。Perl は「長い」サイズの整数演算をネイティブにサポートしていますが、その内部表現に問題があるとは思いません。出力がどのように見えることを期待していますか?
これは、Perl の動作の一部を示すコードです - あなたの例から派生したものです:
use strict;
use warnings;
my $num = sprintf("%ld", 27823221234);
print "$num\n";
my $val = 27823221234;
my $str = sprintf("%ld", $val);
printf "%d = %ld = %f = %s\n", $val, $val, $val, $val;
printf "%d = %ld = %f = %s\n", $str, $str, $str, $str;
64 ビット Perl では、次の結果が得られます。
27823221234
27823221234 = 27823221234 = 27823221234.000000 = 27823221234
27823221234 = 27823221234 = 27823221234.000000 = 27823221234
本当に大きな数 (数百桁) が必要な場合は、それらをサポートするモジュールを調べてください。例えば: