前言
php中的数字分成两类,整数和浮点数。
01.检测变量是否包含一个合法数字
is_numeric() - 函数用于检测变量是否为数字或数字字符串。
$tests = array(
"42", 1337, 0x539, 02471, 0b10100111001, 1337e0,
"0x539", "02471", "0b10100111001", "1337e0", "not numeric",
array(), 9.1, null, '',
);
foreach ($tests as $element) {
if (is_numeric($element)) {
echo var_export($element, true) . " is numeric", PHP_EOL;
} else {
echo var_export($element, true) . " is NOT numeric", PHP_EOL;
}
}
02.浮点数的比较
如上述警告信息所言,由于内部表达方式的原因,比较两个浮点数是否相等是有问题的。不过还是有迂回的方法来比较浮点数值的。
要测试浮点数是否相等,要使用一个仅比该数值大一丁点的最小误差值。该值也被称为机器极小值(epsilon)或最小单元取整数,是计算中所能接受的最小的差别值。
$a 和 $b 在小数点后五位精度内都是相等的。
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
echo "true";
}
03.浮点数舍入
round — 对浮点数进行四舍五入
round(float $val, int $precision = 0);
ceil — 向上取整
$a = 1;
$b = 1.23456780;
echo ceil($a);
echo ceil($b);
floor - 向下取整
echo floor(4.3);
echo floor(9.999);
echo floor(-3.14);
04.在指定范围内生成随机数
mt_rand - 生成随机数
mt_rand(min,max)
05.生成可预测的随机数
mt_srand — 播下一个更好的随机数发生器种子
mt_srand(5555555);
$randval = mt_rand();
var_dump($randval);
06.格式化数字
number_format — 以千位分隔符方式格式化一个数字
$number = 1234.56;
// english notation (default)
$english_format_number = number_format($number);
// 1,235
// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56
$number = 1234.5678;
// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
money_format — 将数字格式化成货币字符串
$number = 1234.56;
// 让我们打印 en_US locale 的国际化格式
setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number) . "\n";
// USD 1,234.56
// 意大利国家的格式,带两位浮点小数`
setlocale(LC_MONETARY, 'it_IT');
echo money_format('%.2n', $number) . "\n";
// Eu 1.234,56
// 负数的使用
$number = -1234.5672;
// 美国国家的格式,使用圆括号 () 标记负数。
// 左侧精度使用十位
setlocale(LC_MONETARY, 'en_US');
echo money_format('%(#10n', $number) . "\n";
// ($ 1,234.57)
// 相似的格式,添加了右侧两位小数点的精度,同时用 * 来填充
echo money_format('%=*(#10.2n', $number) . "\n";
// ($********1,234.57)
// 让我们左对齐,14位宽,左侧八位,右侧两位,不带分组字符
// de_DE 的国际化格式
setlocale(LC_MONETARY, 'de_DE');
echo money_format('%=*^-14#8.2i', 1234.56) . "\n";
// Eu 1234,56****
// 让我们在格式字符串前后,添加一些简介
setlocale(LC_MONETARY, 'en_GB');
$fmt = 'The final value is %i (after a 10%% discount)';
echo money_format($fmt, 1234.56) . "\n";
// The final value is GBP 1,234.56 (after a 10% discount)
07.转换进制
base_convert — 在任意进制之间转换数字
$hexadecimal = 'A37334';
echo base_convert($hexadecimal, 16, 2);
|