我打包了一个数字数组,以便使用套接字编程通过UDP发送到另一个硬件。
当我pack数字12.2,然后unpack它,我得到12.199999892651。因为我使用的是与纬度和经度相关的数字,所以我不能有这样的偏差。
这是我写的简单脚本:
use warnings;
use Time::HiRes qw (sleep);
@Data = ( 20.2, 30.23, 40.121, 1, 2, 3, 4, 6. 4, 3.2, 9.9, 0.1, 12.2, 0.99, 7.8, 999, 12.3 );
$myArr = pack('f*', @Data);
print "$myArr\n\n";
@Dec = unpack('f*',$myArr);
print "@Dec";输出为:
20.2000007629395 30.2299995422363 40.1209983825684 1 2 3 4 6.40000009536743 3.20 000004768372 9.89999961853027 0.100000001490116 12.1999998092651 0.9900000095367 43 7.80000019073486 999 12.3000001907349有什么方法可以控制精度吗?
发布于 2016-09-02 03:43:07
简短的答案是:不要将这些数字打包为浮点数。由于采用IEEE浮点表示法,您将失去准确性。相反,将它们转换为“字符小数”(即字符串),并将其打包为字符串。如果您确实需要精确度,并且不需要对它们执行数学运算,那么您可能还希望将它们存储为Perl中的字符串。
https://stackoverflow.com/questions/39279371
复制相似问题