perl – %s是唯一允许printf正确显示大整数的格式吗?
发布时间:2020-12-16 06:10:19 所属栏目:大数据 来源:网络整理
导读:我只花了一个时间来确定我的大整数是好的,并且 printf %d /%u不能胜任显示它的任务: use strict;use warnings;use bigint;use List::Gen;*factorial = do {use bigint; [..*] 1,1..-code};my $value = factorial(32);printf "%dn",$value; # -1printf "%
我只花了一个时间来确定我的大整数是好的,并且
printf %d /%u不能胜任显示它的任务:
use strict; use warnings; use bigint; use List::Gen; *factorial = do {use bigint; <[..*] 1,1..>->code}; my $value = factorial(32); printf "%dn",$value; # -1 printf "%un",$value; # 18446744073709551615 printf "%sn",$value; # 263130836933693530167218012160000000 如果答案是否定的话,我不会感到惊讶,只是想确认一下. 解决方法
这令人惊讶地难以追查.我在文档中没有看到任何明显的东西,所以我去了源头. print函数由C函数Perl_sv_vcatpvfn_flags实现(在长调用栈的底部).看起来好像这个函数假设数字适合IV或UV.它们的定义是
typedef IVTYPE IV; typedef UVTYPE UV; 反过来又定义了(至少在我的Perl上,我认为这是可配置的) #define IVTYPE long /**/ #define UVTYPE unsigned long /**/ 因此,如果您的数字不适合长,然后(%d)或无符号长(%u),那么字符串(%s)是您唯一的选择.一个更大的问题是你首先使用printf的原因.您是否以某种方式格式化这些数字而不是打印它们?如果没有,那么印刷应该做正确的事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读