I believe that you can also get the compiler to use floating point
arithmetic with the following:
<%= (int) ((4.0/8.0) * 100) %>
It's not as explicit as the typecast, but the 4.0 should be seen as a
floating point number.
-AMT
> -----Original Message-----
> From: A mailing list about Java Server Pages specification and reference
> [mailto:[EMAIL PROTECTED]]On Behalf Of Larry Fluckiger
> Sent: Monday, November 29, 1999 10:43 AM
> To: [EMAIL PROTECTED]
> Subject: Re: <%=numresponses/numrequests*100 %>
>
>
> Nicholas Barrington wrote:
> > Float f = 4 / 8;
> > Integer i = f * 100;
> > Integer i = ((float)(4 / 8)) * 100;
>
> This code won't compile. Even if the java compiler could compile it, it
> would still produce the wrong answer for the same reason. This is
> because 4
> / 8 is still 0, so f would contain 0.0, and i would still be 0.
>
> The concept is correct that floating point arithmetic needs to be used.
> Binary operators like / and * will convert their operands if they need to.
> So, if both operands are integer, java will do integer math, but
> if one is a
> float and the other is integer, java will convert the integer to
> a float and
> perform floating point arithmetic.
>
> Try this instead:
> <%=(int)(((double)4)/8*100)%>
>
> I know this is more complicated, but it works. It converts 4 into a float,
> so the / has to convert the 8 into a float as well. The result of a float
> divide is a float, so the * has to convert its other operand, 100 to a
> float. The result is a float 50, which you may want to convert back to an
> int with the (int) cast. A simpler way to accomplish this is to just store
> the 4 or 8 in a float variable.
>
> Larry
>
>
> -----Original Message-----
> From: Nicholas Barrington [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, November 24, 1999 4:13 PM
> To: [EMAIL PROTECTED]
> Subject: Re: <%=numresponses/numrequests*100 %>
>
>
> James,
>
> 4 / 8 *is* 0, at least the integer part is 0, with a remainder
> (modulus) of
> .5. Some compilers try to compensate for humans using incorrect
> data types
> in arithmetic calculations by rounding based on the 0.0 to 0.4 round down,
> 0.5 to 0.9 round up method. Some don't; they assume we code what we mean
> and only specifiy integers if we are interested in integer precision. If
> you need to divide numbers and want more accuracy in your
> results, try using
> float or double style data types for your arithmetic.
>
> E.G.
>
> Float f = 4 / 8;
> Integer i = f * 100;
>
> or
>
> Integer i = ((Float)(4 / 8)) * 100;
>
> -----Original Message-----
> From: Griggs, James [ mailto:[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]> ]
> Sent: Thursday, November 25, 1999 5:25 AM
> To: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> Subject: <%=numresponses/numrequests*100 %>
>
>
> Any reason the following statement would always produce a 0?
>
> Other expressions work just fine when the result of the first
> calculation is
> above 1 (eg: 5+2*100). Is this a rounding issue ???
>
> <%=4/8*100 %>
>
> ==================================================================
> =========
> To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff
> JSP-INTEREST".
> FAQs on JSP can be found at:
> http://java.sun.com/products/jsp/faq.html
> http://www.esperanto.org.nz/jsp/jspfaq.html
>
> ==================================================================
> =========
> To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff
> JSP-INTEREST".
> FAQs on JSP can be found at:
> http://java.sun.com/products/jsp/faq.html
> http://www.esperanto.org.nz/jsp/jspfaq.html
>
===========================================================================
To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff JSP-INTEREST".
FAQs on JSP can be found at:
http://java.sun.com/products/jsp/faq.html
http://www.esperanto.org.nz/jsp/jspfaq.html