在某些网站上,您可以以.99美分的增量销售商品。我正在尝试验证是否以这种方式输入了资金。例如:
等。除非免费,否则全部以.99美分结尾。因此,如果有人输入1.79
,则检查失败。
我在想也许子字符串/文字黑客或分裂。只是想知道这样的事情是如何做到最好的输入方式。就像有人想在自己的网站上想要这个定价结构一样。没有要求完整的东西。只需要一些指示。
我到目前为止:
<?php
function is99($money)
{
if (!valid money)
{
return 0;
}
else if (ends in 00)
{
return 1;
}
else
{
????
}
}
if (is99($_post['price']))
{
//allowed
}
else
{
die('Price isn\'t in 99 cents increments. Please check the example.');
}
?>
答案 0 :(得分:3)
当你使用$_POST
时,你正在处理字符串。所以你可以验证字符串,例如通过将它与带有字符串函数或正则表达式的简单模式进行比较:
/^\d+.99$/
我只在这里写,因为the mathematically fitting looking solution given above floating point precisionDocs没有显示整个画面。对于输入的值2.99
,它将失败。一个稍微好一点的版本也可以完善剩余的版本:
/**
* @param string $value
* @return bool
*/
function is99($value)
{
$leftover = round($value)-$value;
return 0.01 == round($leftover, 2);
}
首先以字符串方式执行它不会遇到这些问题。
但是我想知道为什么你这么难以输入数据。如果它需要以.99
结束,为什么不创建一个拟合输入?像
Amount [____].99
用户可以输入任何正整数,因此您只需要检查它。它更加安全,因为用户无法输入这么多错误的数字。而且服务器端的验证也更容易。
答案 1 :(得分:2)
这应该适合你:
if (round($amount) - $amount == 0.01){
// do your thing here
}