四舍五入到最近的便士

时间:2014-04-11 16:45:39

标签: php forms function rounding

纽布在这里。

我试图构建一个表单,该表单将接收两个金额,然后根据用户输入的数据返回一组简单的计算(子税额,小计金额,总数等等。

我试图构建一个函数并将其数量调整到最接近的便士数量,但它没有按预期工作。它似乎是它的'我认为最接近的100美元大关。我用谷歌搜索了一下,读了一些堆栈,当我尝试我认为简单的练习时,我变得越来越困惑。

指导帮助表示赞赏

我的代码:

<?php //0102e_taxes-01.php

//Constant never changes, 100% available everywhere- almost always simple datatypes (T or F, num, string)
//define('THIS_PAGE', $_SERVER['PHP_SELF']);//shows webroot
 define('THIS_PAGE', basename($_SERVER['PHP_SELF']));//shows app root - gets name of the file basically

 define('TAX_RATE', .095); //current tax rate us => .095 => is 9.5%

//echo THIS_PAGE;// shows this pagefile
//VAR_DUMP - we love it cause we can see everything
function roundNearestHundredUp($number) {
    return ceil( $number / 100 ) * 100;
    }


if (isset($_POST['submit'])) {//if data, do processing

    $purchase01 = (float) $_POST['purchase01'];//float before floats data after
    $purchase02 = (float) $_POST['purchase02'];//float before floats data after

    $subtotal = $purchase01 + $purchase02;

    $amountTotal = TAX_RATE * $amountBeforeTax;

    $amountTax = $amountTotal - $subtotal;

    echo "<br /><br />";

    echo 'First Purchase: $' . $purchase01 . '<br />';//standard
    echo 'First Purchase: $' . $purchase02 . '<br />';//standard
    echo '<hr />';

    echo 'subtotal before tax: $' . roundNearestHundredUp($subtotal) . '<br />';//standard
    echo '<hr />';

    echo 'Washington state tax: %' . TAX_RATE . '<br />';
    echo '<hr />';

    echo 'your purchase amount is $' . roundNearestHundredUp($amountTotal) . '<br />';//risky double dollar sign
}else{//show Output

    echo
    '
        <form method="post" action="004_form-taxes.php">

        Enter Purchase Amount:
        <input type="text" name="purchase01" />
        <br />

        Enter Purchase Amount:
        <input type="text" name="purchase02" />
        <br />

        <input type="submit" name="submit" />
        </form>
    ';

}//if you dont' need else, do a 'print and die statement' so if else happens you know else happened.
?>

4 个答案:

答案 0 :(得分:5)

查找这三个功能以供参考:

  1. round() - http://ro1.php.net/manual/en/function.round.php
  2. ceil() - http://ro1.php.net/manual/en/function.ceil.php
  3. number_format() - http://ro1.php.net/manual/en/function.number-format.php
  4. 如果你只想围捕,ceil有点难以使用,你将不得不破解它

    $ amount = 14.754

    轮将使其成为14.75 ceil会让它变成15,你会失去便士,但你这样称呼它 - 易于使用黑客

    echo ceil($amount*100)/100;
    

    +++以后编辑+++

    为了更好的做事方式,你可以稍微玩一下:

    echo round(ceil(amount*1000)/1000,2);
    

答案 1 :(得分:2)

ceil()函数的意思是“天花板”。因此它总是给出最接近的int> $数。

我建议你改用round()

答案 2 :(得分:1)

  1. 您不需要明确地强制转换(float)
  2. 您可以直接使用ceil($number)round($number)

答案 3 :(得分:1)

首先,除以100和舍入/上限到下一个整数舍入到100美元,而不是美分!原价是137.8234美元。除以100:1.378234。圆形或天花板:1或2.乘以100:$ 100.00或$ 200.00。你想先乘以 100得到分:$ 137.8234 =&gt; 13783.4。回合或上限:13783或13784.除以100:$ 137.83或$ 137.84。

如何 round 本身就是一个完整的研究课题。最简单的方法是始终将镍(5)向上舍入,但这会产生偏差。您可以将(5)一致地舍入到最接近的偶数(或奇数)数,以减少结果的偏差。无论如何,你通常不想使用ceiling(),因为这会引入很大的偏见。