<div dir="ltr">Thank you for your replies. I suspect the solution is a bit more advanced than where I'm at now, which is chapter 2 of a beginner's book. Not sure why the author chose to use examples using money calculations when other calculations that don't need rounding would have sufficed. I will have to revisit this issue when I'm further along. <br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 23, 2013 at 8:44 PM, Danny Yoo <span dir="ltr"><<a href="mailto:dyoo@hashcollision.org" target="_blank">dyoo@hashcollision.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote"><div class="im">On Wed, Oct 23, 2013 at 4:13 PM, Alan Gauld <span dir="ltr"><<a href="mailto:alan.gauld@btinternet.com" target="_blank">alan.gauld@btinternet.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>On 23/10/13 22:39, Shelby Martin wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I've looked online but I'm confused - I need to keep it so that the<br>
following program limits the output to two decimal places since it deals<br>
in currency.<br>
</blockquote>
<br></div>
Its generally a bad idea to use floats when dealing with currency since they can introduce small errors which can accumulate over time. It's better to either use the Decimal module or to convert money to cents/.pennies and then convertback to dollars for display purposes.<br>


</blockquote><div><br></div><div><br></div></div><div>Hi Shelby,</div><div><br></div><div><br></div><div>If you want to read some gory details, you can find the reasons for why it's unsafe to represent currency with "floating point" numbers.  There's a classic paper called "What Every Computer Scientist Should Know About Floating-Point Arithmetic":</div>


<div><br></div><div>    <a href="http://www.validlab.com/goldberg/paper.pdf" target="_blank">http://www.validlab.com/goldberg/paper.pdf</a><br></div><div><br></div><div>and you probably don't want to read the whole thing.  :P  A rough gist of the problem: traditional, engineering-focused computer math has a particular trade-off that most programmers do not realize at first: it trades accuracy for speed.  The native hardware of your computer does calculations in base-2 rather than base-10 arithmetic.  Unfortunately, that means that fractional quantities take a representational hit: your computer cannot accurately represent certain decimals in base-2.</div>


<div><br></div><div>It turns out that this floating point arithmetic limitation is not so bad for a lot of important applications.  But it doesn't bode well at all for applications that deal with money.  There are libraries in Python that avoid using the built-in floating point hardware, such as the Decimal library that Alan noted.  Computations with it are slower, but that's an acceptable price for getting the dollars and cents right.  If we would do this sort of thing in the real world, we'd use something like the Decimal library.  You'll see equivalent kinds of libraries in other programming languages, like the BigDecimal class in Java.</div>


</div></div></div>
</blockquote></div><br></div>