【发布时间】:2014-02-21 12:58:01
【问题描述】:
我在 .xlsx 文件的单元格中有值“9,2”(荷兰记法“9.2”),该单元格具有“通用”数字格式。此外,您还可以查看公式的上栏中的值显示“9,2”当我使用 PHPExcel 和 ->getValue() 读取此单元格时,我得到“9,199999999999999”。
这是我的代码:
$oPhpReader = PHPExcel_IOFactory::createReader($sFileType);
$aWorksheetNames = $oPhpReader->listWorksheetNames($sFileName);
$oPhpReader->setReadDataOnly(true);
$oPhpReader->setLoadSheetsOnly($aWorksheetNames[0]);
$oPhpExcel = $oPhpReader->load($sFileName);
$oWorksheet = $oPhpExcel->getActiveSheet();
$oCell = $oWorksheet->getCellByColumnAndRow($iCol,$iRow);
$sTempValue = $oCell->getValue();
【问题讨论】:
-
欢迎来到计算机舍入错误的世界......使用 number_format() 或 sprintf() 将其显示到小数点后 1 位,它会神奇地自我纠正
-
好吧,如果我知道我有多少个小数位,那将是一个很好的解决方案,但是有些数字与其他数字有两个或三个数字......坦率地说,计算机没有舍入任何东西。单元格中有一个普通的数字,没有计算,只有 9,2...不可能那么难...
-
但是单元格中没有“普通数字”,单元格中有一个“浮点”值 - 这意味着 en.wikipedia.org/wiki/Floating_point#Accuracy_problems 适用 - “不可能那么难”,但是使用标准 IEEE 处理浮点数的数字计算机的每一种编程语言都容易受到这种影响....您在 MS Excel 中看到的 是 舍入格式
-
如果您尝试使用
getFormattedValue()(返回反映格式掩码的数字)而不是getValue()(返回“原始”数据值),或许可以 -
很明显,这不是 php 或 PHPExcel 的错误,但 PHPExcel 应该提供开箱即用的解决方案。