如何使用php对csv数组中单个列的小数位数进行四舍五入?

如何使用php对csv数组中单个列的小数位数进行四舍五入?,php,html,arrays,csv,decimal,Php,Html,Arrays,Csv,Decimal,我有一些php代码来获取csv文件,将其放入数组,并在html表中显示该数组。此代码将用于具有多个(约10个)列的数据文件。我想将数据点四舍五入到小数点后2位,并且已经能够使用$val=round($val,2)实现这一点。但是,在“我的代码”中使用时,它也会更改时间列的格式,以便显示12:00而不是12:00。如果有人知道如何在不使用时间列的情况下更改数组中某些列的十进制格式,请告诉我。以下是我现在掌握的代码: $out = ''; echo "<th> Time </th&

我有一些php代码来获取csv文件,将其放入数组,并在html表中显示该数组。此代码将用于具有多个(约10个)列的数据文件。我想将数据点四舍五入到小数点后2位,并且已经能够使用$val=round($val,2)实现这一点。但是,在“我的代码”中使用时,它也会更改时间列的格式,以便显示12:00而不是12:00。如果有人知道如何在不使用时间列的情况下更改数组中某些列的十进制格式,请告诉我。以下是我现在掌握的代码:

$out = '';
echo "<th> Time </th><th> Temperature </th><th> Speed  </th>";
$handle = fopen("fakedata.csv", "r");

$columns = array(1,3,5);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $out = ("<tr>\r\n").$out;
        foreach ($data as $index=>$val) {
                if (in_array($index+1, $columns))
            {
                    $val = round($val, 2);
                    $out = ("\t<td>$val</td>\r\n").$out;
            }
    }

        echo("</tr>\r\n");
} //end while
echo $out;

echo "\n</table></body></html>";
$out='';
回声“时间-温度-速度”;
$handle=fopen(“fakedata.csv”,“r”);
$columns=数组(1,3,5);
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
$out=(“\r\n”).$out;
foreach($index=>$val的数据){
if(在数组中($index+1,$columns))
{
$val=圆形($val,2);
$out=(“\t$val\r\n”)。$out;
}
}
回音(“\r\n”);
}//结束时
回音$out;
回音“\n”;

(我知道$out的内容很奇怪,但它需要翻转行顺序并首先显示最新的数据)。无论如何,我的主要问题是更改csv数组某些行的十进制格式,在本例中,仅将$column[3]或第三列更改为小数点后2位。谢谢你的帮助。

只需添加另一个if来检查它是否在第三列,这个例子中我使用了速记操作符

if (in_array($index+1, $columns)) {
    $val = ($index+1 == 3) ? round($val, 2) : $val;
    $out = ("\t<td>$val</td>\r\n").$out;
}
if(在数组中($index+1,$columns)){
$val=($index+1==3)?四舍五入($val,2):$val;
$out=(“\t$val\r\n”)。$out;
}

依靠sprintf()的魔力怎么样? 而不是:

$val = round($val, 2);
$out = ("\t<td>$val</td>\r\n").$out;
$val=round($val,2);
$out=(“\t$val\r\n”)。$out;
尝试:

$out=sprintf(“\t%6.2f\r\n%s”,$val,$out);

非常感谢您,它成功了!我还有一个问题。有了这个数组设置,有没有办法更改代码,使html表中只显示一定数量的行?我将使用的数据文件会不断更新许多行,因此我只想显示大约50或100行。再次感谢。在你的foreach循环中保留一个计数器。在循环的末尾增加它,在顶部使用if检查计数器是否小于50。或者您可以使用if($index)我在计算计数器的确切位置时遇到问题(对不起,我是PHP新手)。以下是我必须测试的内容,但表没有更改:
$counter=0;
foreach($index=>val)和(
if($in_数组($index+1,$columns))和($counter if((in_数组)($index+1,$columns)&&($counter您不能使用'and'之类的,而是使用&&
$out = sprintf("\t<td>% 6.2f</td>\r\n%s",$val,$out);