Float 1有时转换为0,有时为1

时间:2015-01-21 15:16:46

标签: php

我试图通过减去整数部分,将余数乘以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?这对我没有任何意义。谁能给我一个提示我做错了什么?

PS:还在http://ideone.com/hr7M0A

进行了测试

2 个答案:

答案 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)