PHP 将数字截断为最多 15 位,以实现与 MS Excel 中相似的精度

标签 php excel precision truncate

嗨,我遇到了比较在 MS Excel 和 PHP 中计算的数字的问题。

如果我理解正确,我遇到的问题是 MS Excel 将截断最多 15 位的数字,因此我无法比较 PHP 和 MS Excel 结果:
例如:
so 12.34567890123456789 would be truncated and equal to 12.34567890123450000 ,

或者

12345.67890123456789012345 would be truncated and equal 12345.67890123450000000

在 MS Excel 中。

我如何在 PHP 中实现相同的效果,以便将数字截断为最多 15 位数字?

我找到了使用函数 bcdiv() 的建议,它允许将数字截断到指定的小数位数,但是如果在函数中设置了超过 10 个小数位并且它与在女士Excel:

测试
echo 123.4567890123456789;
echo bcdiv(123.4567890123456789, 1, 15); 

//结果
123.4567890123456789
123.4567890123500000000  // have lost digit 4 in the middle of the number

有谁知道如何在 PHP 中像在 EXCEL 中一样截断数字?

最佳答案

PHP 和 Excel 在内部都使用二进制 IEEE 754 double 格式。但是,Excel 计算的数字不是它显示的数字。看:

https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel

因此,您可以强制 PHP 执行与 Excel 相同的奇怪操作,但仅限于显示数字时,而不是在使用它们进行计算时。

我发现 PHP 也舍入到大约 15 位数字,所以我不会费心去精确模拟 Excel 的输出,除非你有充分的理由这样做。

这个问题有点误导,因为 echo 123.4567890123456789; 在我测试时会产生 123.45678901235 (PHP 5.6.36)。

数字 4 变成数字 5 的原因是 4 后面的数字,即“56789”,使 4 大于 4.5,因此四舍五入。所以数字4不会丢失。

更多来源:

http://php.net/manual/en/language.types.float.php

https://en.wikipedia.org/wiki/IEEE_754

https://support.microsoft.com/en-us/help/78113/floating-point-arithmetic-may-give-inaccurate-results-in-excel

关于PHP 将数字截断为最多 15 位,以实现与 MS Excel 中相似的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51290766/

相关文章:

excel - 默认情况下选择刷新时添加的 VBA PivotItems

MySQL的小数计算不一致

math - float 学有问题吗?

python - Python数组中的浮点精度

php - 如何获取好友总数? Facebook PHP-api

javascript - 单击复选框然后使用 jquery 删除验证

php - 如何使用单独的 php 文件从 MySQL 数据库检索一个值,并使用从数据库获取的值更改 html 控件?

java - 获取excel中的列数

javascript - 与 Laravel 分页一起使用的表格搜索

python - 使用 ord() 将字母转换为整数(非常基本)