如何解决PhpExcel额外的小数点错误?

我正在使用PHPExcel进行客户端项目。 有这个错误我一直在面对额外的小数位是随机添加一些单元格,而阅读Excel文件。 例如,而不是56.25 ,我得到56.24999999999 。 我已经将这个问题追溯到PHPExcel本身,我花了很多时间浏览文档,但是我还没有find任何可以解决这个问题的方法。 我不能把数字四舍五入到一个给定的小数点,因为它随机发生,不同的单元格有不同的小数点数字。 请帮忙!!!

编辑:关键是小数点保持完全一样,他们是手动input。 所以如果客户端在一个单元中手动input34.25,然后在其他单元中input51.3456,他们应该保持完全一样! 所以四舍五入并不是这里理想的解决scheme。

在阅读Mark Ba​​ker的评论之后,

这些不是随机的。 十进制浮点值不能总是精确地表示在使用二进制表示的计算机上….这不是一个PHPExcel问题,甚至PHP问题….这是一个logging完备的数字计算机问题; 和格式的解决scheme由sprint()或number_format()提供 –

我发现确保所有数字都保存为文本解决了这个问题。 PHP会将它们读作string,因此它的奇怪的浮点模糊不会成为问题。

看看http://www.php.net/manual/en/function.round.php

 echo round(56.24999999999, 2); 

输出将是56.25

编辑尝试使用这个自定义函数http://www.php.net/manual/en/function.round.php#102641

 <?php function round_up ( $value, $precision ) { $pow = pow ( 10, $precision ); return ( ceil ( $pow * $value ) + ceil ( $pow * $value - ceil ( $pow * $value ) ) ) / $pow; } echo round_up(56.24999999999, 2); // 56.25 ?> 

我也注意到了这一点。 对我来说最快捷的解决scheme是PHPExcel/Calculation.php文件中的一个小修改:

PHPExcel/Calculation.php

更改$setPrecision = (PHP_INT_SIZE == 4) ? 14 : 16; $setPrecision = (PHP_INT_SIZE == 4) ? 14 : 16; 像一个低值

 $setPrecision = (PHP_INT_SIZE == 4) ? 4 : 4; 
Interesting Posts