我正在尝试计算PHP中十进制值数组的总和,但由于某种原因,它会四舍五入为整数。
例如:
$oldArray = array(0.00,1000.11,988.92,978.22,964.01,953.07,948.82,917.26,902.56,913.21,904.08,898.86,892.79);
$myVar = 0.0;
for($k=1;$k<10;$k++)
{
$myVar += $oldArray[$k];
}
print_r($myVar);
$ oldArray实际上是用SQL查询中的十进制值填充的($ oldarray的长度大约是几百,但我想要前10个。 在上面的例子中,我期望$ myVar是一个小数,但事实证明它只是一个整数。我尝试在for循环之前设置$ myVar = 0.0000,我尝试了$ myVar + = $ oldArray [$ k] + 0.0000等,但似乎没有任何效果。
我做错了什么?如何将$ myVar显式设置为小数?
答案 0 :(得分:11)
鉴于这似乎无法重现,对我而言,这听起来像是PHP环境本身的问题。
检查php.ini是否有一个名为“precision”的设置,并确保将其设置为默认的14位有效数字。我无法想象为什么会改变这种情况,但肯定会产生影响。
答案 1 :(得分:4)
您可以尝试使用array_sum()代替并使用(float)来转换值。另外,我会确保数组中的值格式正确(1.45而不是1,45)。 HTH。
<强>更新强>
顺便说一下。你可以使用“is_float()”来检查数组中的每个参数。
答案 2 :(得分:3)
无法重现这一点。
php > $oldArray = array(0, .1, .2, .3, .4, .5, .6, .7, .8, .9);
php > $myVar = 0.0;
php > for($k=0;$k < count($oldArray);$k++)
php > {
php { $myVar += $oldArray[$k];
php { }
php > print_r($myVar);
4.5
编辑:我在评论中尝试了代码,没关系。像AlbertoPL一样,我怀疑问题出在其他地方。
php > $oldArray = array(0.01,1000.11,988.92,978.22,964.01,953.07,948.82,917.26,902.56,913.21,904.08,898.86,892.79);
php > $myVar = 0.0000;
php > for($k=1;$k<10;$k++)
php > $myVar += $oldArray[$k];
php > print_r($myVar);
8566.18
答案 3 :(得分:0)
制作自己的实施:
function sum_array($arr){
$count = 0;
foreach ($arr as $val){
if (!is_numeric($val) // neglect any non numeric values
{
$error = true;
continue;
}
else{
$count = $count + ($val*1); //casting to numeric if the value supplied as string
}
}
return $count
}
echo sum_array($myArray);