1、php保留两位小数并且四舍五入
round(123.666666, 2); // 123.6
2、php进一法取整(向上取整)
echo ceil(4.3); // 5
echo ceil(9.999); // 10
3、php舍去法,取整数(向下取整)
echo floor(4.3); // 4
echo floor(9.999); // 9
对于涉及金钱的操作,在 PHP 中应当使用,BC Math 数学函数或者 GMP 函数,而非浮点数,因为这些可能会导致精度丢失。
要使用 BC 这个函数库,要在编译 PHP 程序时加入 –enable-bcmath 的选项。
将二个高精确度数字相除。
bcdiv($money,1e4,4);
bcadd: 将二个高精确度数字相加。
bccomp: 比较二个高精确度数字。
bcdiv: 将二个高精确度数字相除。
bcmod: 取得高精确度数字的余数。
bcmul: 将二个高精确度数字相乘。
bcpow: 求一高精确度数字次方值。
bcscale: 配置程序中所有 BC 函数库的默认小数点位数。
bcsqrt: 求一高精确度数字的平方根。
bcsub: 将二个高精确度数字相减。
银行家舍入法
四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一。
保留两位小数,例:
1.2849 = 1.28 -> 四舍
1.2866 = 1.29 -> 六入
1.2851 = 1.29 -> 五后非空就进一
1.2850 = 1.28 -> 五后为空看奇偶,五前为偶应舍去
1.2750 = 1.28 -> 五后为空看奇偶,五前为奇要进一
实现代码如下:
echo round(1.2849, 2, PHP_ROUND_HALF_EVEN);
//输出:1.28
echo round(1.2866, 2, PHP_ROUND_HALF_EVEN);
//输出:1.29
echo round(1.2851, 2, PHP_ROUND_HALF_EVEN);
//输出:1.29
echo round(1.2850, 2, PHP_ROUND_HALF_EVEN);
//输出:1.28
echo round(1.2750, 2, PHP_ROUND_HALF_EVEN);
//输出:1.28
数值格式化(千位分组)应用于金额的展示,比如我们经常会看的银行卡余额。
echo number_format(‘10000.98’, 2, ‘.’, ‘,’);
//输出:10,000.98
echo number_format(‘340888999’, 2, ‘.’, ‘,’);
//输出:340,888,999.00
MySQL 浮点型字段
在 MySQL 中,创建表字段时也有浮点数类型。
浮点数类型包括单精度浮点数(float)和双精度浮点数(double)。
同理,不建议使用浮点数类型!!!
浮点数存在误差,当我们使用精度敏感的数据时,应该使用定点数(decimal)进行存储。