ID:               22240
 Updated by:       [EMAIL PROTECTED]
 Reported By:      shadlej at iwakuni dot usmc dot mil
-Status:           Open
+Status:           Bogus
 Bug Type:         Math related
 Operating System: Windows
 PHP Version:      4.3.0
 New Comment:

Just for the record, this was complete user-error.  The relevant lines
from the originally posted script are:

  $totalamount = number_format($totalamount,2);
  ...
  $taxrate = 0.10;
  $totalamount = $totalamount * (1 + $taxrate);

The first quoted line will set $totalamount to a string representation
of the dollar amount: "0.00" to "999.99" for numbers under 1000 (which
is fine), but then "1,000.00" and so on for greater values.  This is
then fed back into the calculation on the last quoted line, but as PHP
doesn't recognize commas as a valid part of a number, you just get the
digits before the first comma converted and used in your with-tax
calculation.  This is why moving the number_format() into the echos is,
in fact, the expected and correct solution.


Previous Comments:
------------------------------------------------------------------------

[2003-02-18 05:27:35] shadlej at iwakuni dot usmc dot mil

Well, it sort-of worked. I had to move the number_format function off
the $var and into the echo in BOTH areas. (follows) I don't know why it
works the other way up until a total of 999 and anything after that is
incorrect. I guess it doesn't matter. Lesson learned.  ThanX for
following up. 


// $totalamount = number_format($totalamount, 2);
  echo "<br>\n";
  echo "Items Ordered:      ".$totalqty."<br>\n";
  echo "Subtotal:           $".number_format($totalamount,
2)."<br>\n";
  $taxrate = 0.10;
  $totalamount = $totalamount * (1 + $taxrate);
//  $totalamount = number_format($totalamount, 2);
  echo "Total including tax: $".number_format($totalamount,
2)."<br>\n";

------------------------------------------------------------------------

[2003-02-17 17:44:59] [EMAIL PROTECTED]

<?php

echo number_format(1111, 2);

?>

Does this work?


------------------------------------------------------------------------

[2003-02-17 02:58:54] shadlej at iwakuni dot usmc dot mil

Same results. ( I used the Windows build ) Anything over 999 as a total
gets an incorrect result. BTW number_function should read
number_format. Sorry for the mistake.

------------------------------------------------------------------------

[2003-02-16 10:28:20] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php4-STABLE-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-STABLE-latest.zip



------------------------------------------------------------------------

[2003-02-16 03:44:07] shadlej at iwakuni dot usmc dot mil

I got this code from a book. It works as long as the total is less than
999. when it exceeds 999, it can't calculate the total properly. I
think it has something to do with the number_function.  


+++++++++++++++++++++index.html ++++++++++++++++++

<form action="processorder.php" method=post>
<table border=0>

<tr bgcolor=#cccccc>
  <td width=150>Item</td>
  <td width=15>Quantity</td>
</tr>

<tr>
  <td>Tires</td>
  <td align=center><input type="text" name="tireqty" size=3
maxlength=3></td>
</tr>

<tr>
  <td>Oil</td>
  <td align=center><input type="text" name="oilqty" size=3
maxlength=3></td>
</tr>

<tr>
  <td>Spark Plugs</td>
  <td align=center><input type="text" name="sparkqty" size=3
maxlength=3></td>
</tr>

<tr>
  <td colspan=2 align=center><input type=submit value="Submit
Order"></td>
</tr>
</table>
</form>


++++++++++++ preprocess.php ++++++++++++++++++

<html>
<head>
  <title>Jim's Auto Parts - Order Results</title>
</head>
<body>
<h1>Jim's Auto Parts</h1>
<h2>Order Results</h2>

<?
  define("TIREPRICE", 100);
  define("OILPRICE", 10);
  define("SPARKPRICE", 4);
  
  
  echo "<p>Order Processed at ";
  echo date("H:i, jS F");
  echo "<br>";
  echo "<p>Your order is as follows:";
  echo "<br>";
  echo $tireqty." tires<br>";
  echo $oilqty." bottles of oil<br>";
  echo $sparkqty." spark plugs<br>";
  
  $totalqty = $tireqty + $oilqty + $sparkqty;
  $totalamount = $tireqty  * TIREPRICE
               + $oilqty   * OILPRICE
               + $sparkqty * SPARKPRICE;
  $totalamount = number_format($totalamount,2);
  echo "<br>\n";
  echo "Items Ordered:      ".$totalqty."<br>\n";
  echo "Subtotal:           $".$totalamount."<br>\n";
  $taxrate = 0.10;
  $totalamount = $totalamount * (1 + $taxrate);
  $totalamount = number_format($totalamount, 2);
  echo "Total including tax: $".$totalamount."<br>\n";

?>

</body>
</html>

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=22240&edit=1

Reply via email to