What about using this kind of rounding:

var decimals = 2;
var result = Math.round(number * Math.pow(10, dec)) / Math.pow(10, dec);

Any problems with this approach?

---
Felipe Marin Cypriano
Vitória - ES
http://www.linkedin.com/in/felipecypriano


On Wed, Feb 25, 2009 at 12:50 PM, Alan Hadsell <[email protected]> wrote:

>
>
>
> On Feb 24, 1:52 pm, "tony.p.." <[email protected]> wrote:
>
> > This seems like a bug in JS, more than just the way it handles float.
> > Because I'm not doing any calculations on the GWT (JS) side, I'm just
> > printing what comes from the server. So if 15.2 if printed as
> > 15.2000000000, that would be ok, but to be printed as
> > 15.199999809265136 is really weired. Am I right or am I missing
> > something?
>
> You're missing something.  In JavaScript there is no such number as
> 15.2.  JavaScript uses IEEE-754 standard floating-point notation,
> which can only represent numbers of the form (i times 2 ** j) where **
> represents exponentiation, and i and j are integers.  See
> http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html for
> details.  The effect is similar to trying to represent 1/3 with an
> exact decimal representation; you can come very close but you can't
> get it exactly.
>
> If you want to represent exact decimal numbers in JavaScript you have
> two choices:  Use strings, and forego doing arithmetic on them, or use
> rational numbers, where all numbers are internally in the form (i/j)
> with i and j integers.
>
> One very useful subset of rational notation is scaled decimal, where j
> is a constant power of 10 depending on the maximum precision you want
> to retain.  So if you're maintaining 4 digits after the decimal place,
> j is 10000, and 15.2 is represented as 152000/10000.  The denominator
> (also called the scale factor) can be implied in this case (i.e. you
> don't need to store it with each number; think of it as a static final
> value).
>
> This notation makes it easy to add and subtract; just add or subtract
> the numerators.  Multiplication is easy if the numbers are small --
> multiply the numerators and then divide by the scale factor.  Division
> is relatively easy; multiply one numerator by the scale factor and
> then divide by the other numerator.  In both multiplication and
> division you need to think about rounding, and also about overflow if
> any of the intermediate results might exceed 15 digits.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to