我有一个字符串“65.57”。 我需要得到int 6557
...然而
(int) (((float) "65.57") * 100) === 6556
奇怪的是,当分手时,一切都按预期工作:
((float) "65.57") * 100) === 6557.0
和
(int) 6557.0 === 6557
但是在内联时,我得到了6556。
答案 0 :(得分:1)
我只是删掉了点:
$s = '65.57';
$x = str_replace('.', '', $s);
如果你确实需要一个int,那么转换结果:
$x = (int) str_replace('.', '', $s);
答案 1 :(得分:0)
像Alex说的那样
不要乱花车,它们只会给你带来痛苦。 :)
function parsePrice($str) {
$parts = explode('.', $str);
return intval($parts[0]) * 100 + intval($parts[1]);
}
var_dump(parsePrice('65.57'));
// Output: int(6557)
答案 2 :(得分:0)
你偶然发现浮点不准确问题。
问题在于浮点总是有一些小数,有时会隐藏一些小数,因此,你会偶尔结束它们并不总是像你期望的那样相乘。 / p>
真正的原因在于二进制,我们习惯于10基数字系统。以同样的方式我们无法完美地描述1/3(~0.3333333333 ..)二进制不能总是描述我们在10-base中的“完美精细十进制数”,你可以调整PHP用来计算浮点数的精度在你的php.ini中。但是你可以避免使用浮点数,并使用整数进行计算。
有关该主题的更多信息:
Floating point inaccuracy examples
Can I rely on PHP php.ini precision workaround for floating point issue