使用php变量进行算术运算

时间:2015-09-08 07:25:34

标签: php html mysql

我有一个表,显示来自数据库的值的算术运算。 在数据库中,所有值都是FLOAT类型。  我的算术运算是:



        $difference = $row['variable1']+$row['variable2']-$row['variable3']-$row['variable4'];
<td><?php echo (round($difference, 2)) ?></td>
&#13;
&#13;
&#13;

因此。我的问题是我插入的一些值的计算。 例如:

variable1=10      
variable2=10.08   
variable3=10   
variable4=10.08

正常它必须给出差异= 0;但它显示差异= -0; 在每种情况下,如果我使用xx.07,xx.08,xx.09的值,它给我一个结果= -0;它不会发生高达xx.07的值。

  

示例:variable1=10; variable2=10.06; variable3=10;variable4=10.06; The result = 0;
  如果我没有绕过差异,它会得到如下结果:-5.68434188608E-14;

我尝试在计算之前对变量进行舍入,我尝试在计算中使用"()",我试图在操作中直接对变量进行舍入,因为我认为它在<之后需要超过2个值,{ {1}}(FLOAT类型)。

我在插入数据库时​​尝试对值进行舍入,但是它为输入字段插入了错误,因为它有4个以上的变量(在差异操作中没有使用)。

请帮助我解决这个问题,我真的不明白为什么会这样。

5 个答案:

答案 0 :(得分:1)

这是“正常”行为。您可以阅读有关已签名的零here。 现在关于你的问题:添加0应该有所帮助。

<td><?php echo ((round($difference, 2))+0) ?></td>

答案 1 :(得分:0)

在对其进行计算之前,您需要对每个值进行舍入。这是因为PHP在内部存储这些数字的方式。

答案 2 :(得分:0)

  

注意:默认情况下,PHP无法正确处理“12,300.2”等字符串。请参阅converting from strings

image

Read about php round() function

答案 3 :(得分:0)

试试这个

$difference = ($row['variable1']+$row['variable2'])-($row['variable3']+$row['variable4']);

答案 4 :(得分:0)

问题是浮点数作为二进制表示存储在数据库中,因此有时与十进制不完全相同。

您可以通过考虑如何存储小数部分来开始理解这一点:

{{1}}

然而,要制作0.08,你必须找到代表这个的1 / 2,1 / 4,1 / 8,1 / 16等的组合。不幸的是,这不能完全用二进制表示,所以它接近但不准确。

使用这些计算时,由于它们不准确,因此可能会存在非常小的差异。你看到的结果是“-0”(负零)代表一个非常小的负数,正如@DannyPhantom所提到的那样。

如果您最多只能使用2位小数,则可以(取决于您的数据库)使用专为此设计的“十进制”类型。

这个在线计算器可以帮助您看到: http://www.binaryconvert.com/result_float.html?decimal=049048046048056

有关更多信息,请参阅此SO问题: How to convert float number to Binary?