1.7 数字介绍

在介绍变量时,我明确指出PHP具有整型和浮点型(小数)数字类型。但是,依据我的经验,这两种类型可以归类到一般的数字(number)之下,而不会丢失任何有价值的差别(在极大程度上是这样)。PHP中有效的数字类型的变量可以是:

  • 8

  • 3.14

  • 10980843985

  • -4.2398508

  • 4.4e2

注意:这些值永远不会用引号括起来(如果这样做,它们就是含有数值的字符串),也不能用逗号来表示千位分隔符。此外,数字被假定为正,除非在其前面放置一个负号(-)。

对数字除了可以使用标准的算术运算符(参见表1-1)之外,还可以使用许多函数。两个常用的函数是round()number_format()。前者用于把小数四舍五入为最接近的整数:

$n = 3.14;
$n = round ($n); // 3

或者把小数四舍五入到指定的位数:

$n = 3.142857;
$n = round ($n, 3); // 3.143
表1-1 标准数学运算符
运 算 符 含  义
+ 加法
- 减法
* 乘法
/ 除法
% 取模
++ 增量
-- 减量

number_format()函数用于把一个数字转换成更常见的表示形式,用逗号作为千位分隔符,例如:

$n = 20943;
$n = number_format ($n); // 20,943

这个函数还可以设置小数点的指定位数:

$n = 20943;
$n = number_format ($n, 2); // 20,943.00

为了练习操作数字,我将编写一个模型脚本,它执行人们可能在电子商务购物车中使用的计算。

使用数字

1. 在文本编辑器或IDE中创建一个新的PHP文档,命名为number.php(参见脚本1-8)。

脚本1-8 numbers.php脚本演示了电子商务应用程序中使用的基本数学计算

1    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3    <head>
4       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5       <title>Numbers</title>
6    </head>
7    <body>
8    <?php # Script 1.8 - numbers.php
9    
10   // Set the variables:
11   $quantity = 30; // Buying 30 widgets.
12   $price = 119.95;
13   $taxrate = .05; // 5% sales tax.
14   
15   // Calculate the total:
16   $total = $quantity * $price;
17   $total = $total + ($total * $taxrate); // Calculate and add the tax.
18   
19   // Format the total:
20   $total = number_format ($total, 2);
21   
22   // Print the results:
23   echo '<p>You are purchasing <b>' . $quantity . '</b> widget(s) at a cost of <b>$' . $price .'</b> each. With  tax, the total comes to <b>$' .  $total . '</b>.</p>';
24   
25   ?>
26   </body>
27   </html>

2. 建立必需的变量。

$quantity = 30;
$price = 119.95;
$taxrate = .05;

这个脚本将使用3个硬编码的变量,并在它们上面执行计算。在本书后面,你将看到如何能够动态地确定这些值(即通过用户与HTML表单的交互)。

3. 执行计算。

$total = $quantity * $price;
$total = $total + ($total * $taxrate);

第一行将订单总额设置为所购买小器具的数量乘以每件小器具的价格。然后,第二行把税金加到总额中(通过用税率乘以总额来计算)。

4. 格式化总额。

$total = number_format ($total, 2);

number_format()函数将把总额用千位分隔符分开,并将其四舍五入为两位小数。这将为最终用户显示更合适的结果。

5. 打印结果。

echo '<p>You are purchasing <b>' . $quantity . '</b> widget(s) at a cost of <b>$' . $price . '</b> each.With tax, the total comes to <b>$' . $total . '</b>.</p>';

这个脚本中的最后一步是打印出结果。为了使用HTML、打印的美元符号以及变量的组合,echo语句使用了单引号括住的文本和连接的变量。你将在本章的最后一个示例中看到另一个解决方案。

6. 完成PHP代码和HTML页面。

?>
</body>
</html>

7. 将文件另存为numbers.php,存放在Web目录中,并在Web浏览器中测试它(参见图1-16)。

图1-16 数字PHP页面(参见脚本1-8)基于设置的值执行计算

8. 如果需要,可更改最初的3个变量,然后重新运行脚本(参见图1-17)。

图1-17 要更改生成的Web页面,可以改变全部3个变量或其中的任何一个(对比图1-16)

提示

  • PHP在大多数平台上支持的最大整数在20亿左右。对于更大的数字,PHP将自动使用浮点类型。

  • 当处理算术运算时,会出现优先级问题(执行复杂计算的次序)。虽然PHP手册和其他资源倾向于列出优先级的层次结构,但是,我发现把子句组织在括号中来强制执行次序,会使程序设计更安全、更易读(参见脚本1-8的第17行)。

  • 计算机处理小数的名声不佳。例如,2.0这个数字实际上存储为1.999 99。在大多数情况下,这不是一个问题,但是,倘若数学精度极其重要,这就要依靠整数,而不是小数。PHP手册中包含关于这个主题的信息,以及用于改进计算准确性的备用函数。

  • 许多数学运算符还具有相应的赋值运算符,从而允许简写赋值语句。下面的一行语句:

    $total = $total + ($total * $taxrate);
    

    可以重写为:

    $total += ($total * $taxrate);
    
  • 如果没有使用两位小数设置$price的值(例如,119.9或34),那么可能希望在打印$price之前,对其应用number_format()

目录