我有一个传递信息的HTML表单,特别是我要添加的数字。当我添加这些值时,由于某种原因,我的几个值没有正确添加。这是我的原始代码:
以下是从表单传递的数组:
289.03
439.08
147.35
153.82
163.94
382.76
2359.43
1983.83
这是PHP代码:
<?php
$netRate = $_POST['netrate'];
$payloads = $_POST['topay'];
$netLoad=0;
for($i=0;$i<=count($payloads);$i++)
{
if(!empty($payloads[$i]))
{
///other code is in here/////
echo '<td width="60" valign="top">'.$netRate[$i].'</td>';
$netLoad = $netLoad + $netRate[$i];
echo "net rate: ". $netRate[$i];
echo "<br>";
echo "net load (sum of all loads): ". $netLoad;
echo "<br>";
}
}
?>
这些是我从echo语句中得到的结果:
net rate: 289.03
net load (sum of all loads): 289.03
net rate: 439.08
net load (sum of all loads): 728.11
net rate: 147.35
net load (sum of all loads): 875.46
net rate: 153.82
net load (sum of all loads): 1029.28
net rate: 163.94
net load (sum of all loads): 1193.22
net rate: 382.76
net load (sum of all loads): 1575.98
net rate: 2,359.43
net load (sum of all loads): 1577.98
net rate: 1,983.83
net load (sum of all loads): 1578.98
所以即使数组的最后两个$ netRate部分是正确的(2359.43&amp; 1983.83),$ netLoad也没有正确添加它们。这可能是什么问题?
答案 0 :(得分:2)
这里的问题是$ netRate实际上是一个字符串数组。当您使用+运算符时,PHP会将这些字符串转换为数字值。不幸的是,您的系统/ PHP正在将“,”识别为十进制字符并将2,359.43转换为2.35
floatval的使用会遇到与隐式转换相同的问题。即系统会将错误的字符识别为十进制字符。
解决这个问题看似简单的方法就是在转换之前从字符串中删除任何“,”:
// do NOT use this
$netLoad = $netLoad + str_replace(",", "", $netRate[$i]);
不幸的是使用“。”和“,”取决于提交表单的用户的区域设置,因此您可以根据提交数据的人员预期不同的字符。 (这就是为什么许多API以美分而非值发送值,例如100而不是1.00)。
但是有一个解决方案。
如果您查看以下页面上的评论: http://php.net/manual/en/function.floatval.php
你可以看到有人提交了一个tofloat函数,它将使用最后一个逗号或点来解决问题,以执行转换。
享受。
答案 1 :(得分:1)
$netRate = number_format( $_POST['netrate'] ,2,".","");
$payloads = number_format( $_POST['topay'] ,2,".","");