我正在处理货币输入。只能使用小数点后两位数。我尝试将输入转换为浮点数并乘以 100,这可以正常工作,直到有人在小数点后输入超过两位数:
// Returns 6999.8 instead of 6999
$cents = floatval('69.998') * 100;
然后我尝试将结果转换为 int,因此小数点后的连续数字被忽略。它解决了上述问题('69.998' 变为 6999),但创建了一个具有浮点到整数转换的新问题:
// Returns 6998 instead of 6999
$cents = intval(floatval('69.99') * 100);
我也考虑过 floor(),但它会触发与 intval() 相同的浮动问题。
这就是我正在考虑使用的:
$cents = intval((string)(floatval('69.99') * 100));
它在这两种情况下都有效,但感觉就像一个黑客,而且已经很晚了,我的头很痛,所以也许我在这里遗漏了一些明显的东西。有一个更好的方法吗?