2

整数ではなく長いデータ型を必要とするアプリを Perl で作成しています。どうすればこれを達成できますか。例えば;

my $num = sprintf('%ld', 27823221234);

print $num;

出力は long ではなく整数です。

4

4 に答える 4

12

オプションは次のとおりです。

更新: ああ、整数の代わりに浮動小数点数を使用することもできます:

printf("%.0f", 2**50)

IIRC、現在のほとんどのアーキテクチャでは、浮動小数点数は 2**54-1 までの整数を正確に表すことができます。

于 2011-01-24T16:50:43.870 に答える
1

あなたの場合、 27823221234 は実際には double として表されるため、sprintf にフィードしようとすると -1 を受け取ります

my $x = 27823221234;

my $num = sprintf('%lf', $x);

print $num, "\n";

に屈する

27823221234.000000

大きな整数で数学演算を行いたい場合は、Math::Bigint モジュールの使用を検討してください。

于 2011-01-24T16:45:06.217 に答える
1

あなたはおそらく混乱しています。Perl は「長い」サイズの整数演算をネイティブにサポートしていますが、その内部表現に問題があるとは思いません。出力がどのように見えることを期待していますか?

于 2011-01-24T16:47:04.610 に答える
1

これは、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

本当に大きな数 (数百桁) が必要な場合は、それらをサポートするモジュールを調べてください。例えば:

于 2011-01-24T16:50:21.003 に答える