我试图通过减去整数部分,将余数乘以10然后将结果转换为int或使用intval()来将浮点数的第一个小数位作为整数。我注意到带有x.1的数字的结果正确地为1作为float,但在将其转换为整数后,它有时变为0,有时为1.
我尝试用1.1到9.1的数字进行测试:
for ($number = 1; $number < 10; $number++) {
$result = 10 * ($number + 0.1 - $number);
echo "<br/> number = " . ($number + 0.1) . ", result: ";
var_dump($result);
$result_int = intval($result);
var_dump($result_int);
}
从4.1开始作为输入,1奇怪地转换为0:
number = 1.1, result: float(1) int(1)
number = 2.1, result: float(1) int(1)
number = 3.1, result: float(1) int(1)
number = 4.1, result: float(1) int(0)
number = 5.1, result: float(1) int(0)
number = 6.1, result: float(1) int(0)
number = 7.1, result: float(1) int(0)
number = 8.1, result: float(1) int(0)
number = 9.1, result: float(1) int(0)
为什么选择4.1?这对我没有任何意义。谁能给我一个提示我做错了什么?
进行了测试答案 0 :(得分:0)
我的php有点生疏,所以我的语法可能已关闭,但是转换为字符串并取最右边的数字不应该更简单吗?
sprintf($Str, "%.1f", $number);
$digit=$Str[strlen($Str)-1]; // Last digit
答案 1 :(得分:0)
您正在看到这些结果,因为浮点运算并不完全准确。
使用fmod
:
$result = substr(fmod($number, 1) * 10, 0, 1)