我试图通过减去整数部分,将余数乘以 10,然后将结果转换为 int 或使用 intval() 来获取浮点数的第一个小数位作为整数。我注意到 x.1 的数字的结果正确为 1 作为浮点数,但在将其转换为整数后,它有时变为 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?这对我来说没有任何意义。谁能给我一个提示,我做错了什么?
PS:也在 http://ideone.com/hr7M0A
您看到这些结果是因为浮点运算并不完全准确。
不要尝试手动获取第一个小数点,请使用fmod
:
$result = substr(fmod($number, 1) * 10, 0, 1)
我的 php 有点生疏,所以我的语法可能关闭了,但转换为字符串并取最右边的数字不应该更简单吗?
sprintf($Str, "%.1f", $number);
$digit=$Str[strlen($Str)-1]; // Last digit