$i = 2.3;
echo ($i*100).”<br>”;
$r = intval($i*100, 2);
echo $r;
//输出结构
230
229
原因:浮点数的不精确存储造成的
存储是近似值或者有些近似值=真实值 有些不等于
解决方案,使用 round() 函数
或者 设置
ini_set(“precision”, “12”);
ini_set(“precision”, “4”);
规定浮点数 通用精度为4
这样 所有计算 比如 1.234* 0.511
总是会得到1个4位小数的数值,后面的会四舍五入
如果你的计算 确定了最后的小数点 可以设置PHP支持到最后的一位 剩下的后一位会自动四舍五入
一般来讲 你可以定义到 4位或者 更高的12位 确定下来后 就不会出现 299.9999999 这样的值了
$num = 0.12345600000000000;
//整数部分为0 ,位数为 0 ,小数部分末尾的 0 不计入位数,所以总位数为 6
ini_set(“precision”, “12”);
echo $num; // 0.123456
//未超过精度值,显示的结果为 0.123456
ini_set(“precision”, “3”);
echo $num; // 0.123
//超过精度值,保留3位
ini_set(“precision”, “5”);
echo $num; // 0.12346
//超过精度值,保留5位
这种情况下,精度值等价于小数点后保留几位。
整数部分大于 0 情况
$num = 12.12345600000000000;
//整数部分为12 ,位数为 2 ,小数部分末尾的 0 不计入位数,位数为6,所以总位数为 2 + 6
ini_set(“precision”, “12”);
echo $num; // 12.123456
//未超过精度值,显示的结果为 12.123456
计算机存储 浮点数都是这样! 要么确定精度 要么自己用 round 四舍五入
一个是按需 一个是全局