我知道10.51200使用IEEE浮点格式在内存中保存为0x4025065220000000。但是当我将它传递给Perl中的sprintf()函数时,如下所示,我得到错误的值作为输出。你能告诉我哪里出错了。
$ temp = 0x4025065220000000;
$ temp1 = sprintf(" float:%f \ n",$ temp);
print" $ temp1&#34 ;;
输出:
float:4622107541822767104.000000
答案 0 :(得分:4)
据我所知,0x4025065220000000
为10.51235,而非10.51200 - 即0x40250624dd2f1aa0
。无论如何,请参阅pack
:
$ perl -wMstrict -le 'print unpack("d>",pack("q>",0x4025065220000000))'
Hexadecimal number > 0xffffffff non-portable at -e line 1.
10.5123453140259
$ perl -wMstrict -le 'print unpack("H*",pack("d>",10.51200))'
40250624dd2f1aa0
$ perl -wMstrict -le 'print unpack("d>",pack("q>",0x40250624dd2f1aa0))'
Hexadecimal number > 0xffffffff non-portable at -e line 1.
10.512
请注意,必须编译Perl以支持上面的四边形(参见perl -V
的输出)。如果你不喜欢这个警告,你可以改用字符串:
$ perl -wMstrict -le 'print unpack("d>",pack("H*","4025065220000000"))'
10.5123453140259
$ perl -wMstrict -le 'print unpack("d>",pack("H*","40250624dd2f1aa0"))'
10.512