我需要读取数据库中的一些数字并使用 Perl 将它们写入文本文件。
在数字所在的表格中,数据格式定义为numeric (25,5)
(读取 25 位,包括 5 位小数)。
我用 a 格式化文件中的数字sprintf "%.5f", $myvalue
以强制使用 5 位小数,我只是注意到对于伟大的值,超过 17 位的数字存在精度损失:
db = 123.12345
file = 123.12345 (OK)
db = 12345678901234891.12345
file = 12345678901234892.00000 (seems to be rounded to upper integer)
db = 12345678901234567890.12345
file = 12345678901234567000.00000 (truncation ?)
Perl 对于固定十进制数的最大精度是多少?
我一般都知道浮点算术的概念和局限性,但我不是 Perl 僧侣,我不知道 Perl 的内部结构,所以我不知道它是否正常(或者它是否与浮点)。我不确定这是 Perl 的内部限制,还是与sprintf
处理相关的问题。
是否有可以帮助解决该问题的解决方法或专用模块?
一些值得注意的点:
- 这是已经使用 Perl 的系统的附加功能,因此不能选择使用其他工具
- 被处理的数据是财务数据,所以我需要保留每一分钱,我无法应对 +/- 10 000 单位的精度:^S