检查钱是否以.99美分为增量

时间:2012-01-21 14:45:19

标签: php

在某些网站上,您可以以.99美分的增量销售商品。我正在尝试验证是否以这种方式输入了资金。例如:

  • 0.00
  • 0.99
  • 1.99
  • 2.99
  • 3.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.');
}
?>

2 个答案:

答案 0 :(得分:3)

当你使用$_POST时,你正在处理字符串。所以你可以验证字符串,例如通过将它与带有字符串函数或正则表达式的简单模式进行比较:

/^\d+.99$/

我只在这里写,因为the mathematically fitting looking solution given above floating point precision­Docs没有显示整个画面。对于输入的值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
}