Closed Bug 226993 Opened 21 years ago Closed 17 years ago

Javascript toFixed rounds in unexpected manner

Categories

(Core :: JavaScript Engine, defect)

x86
Windows 2000
defect
Not set
critical

Tracking

()

RESOLVED DUPLICATE of bug 186563

People

(Reporter: michel, Unassigned)

References

Details

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007

(0.045).toFixed(2)
I would expect .05 like IE gives and not .04

Reproducible: Always

Steps to Reproduce:
1. type javascript:alert((0.045).toFixed(2)) into location bar
2. hit enter
3. marvel at the result

Actual Results:  
0.04

Expected Results:  
0.05
Confirmed. 1.6a/w2k.

We definitely should be rounding up, by my reading of ECMA-262 (15.7.4.5), and 
indeed we do appear to, for some cases:

(0.5).ToFixed(0) == "1"  (0.05).ToFixed(1) == "0.1"
(1.5).ToFixed(0) == "2"  (0.15).ToFixed(1) == "0.1"
(2.5).ToFixed(0) == "3"  (0.25).ToFixed(1) == "0.3"
(3.5).ToFixed(0) == "4"  (0.35).ToFixed(1) == "0.3"
(4.5).ToFixed(0) == "5"  (0.45).ToFixed(1) == "0.5"
(5.5).ToFixed(0) == "6"  (0.55).ToFixed(1) == "0.6"
(6.5).ToFixed(0) == "7"  (0.65).ToFixed(1) == "0.7"
(7.5).ToFixed(0) == "8"  (0.75).ToFixed(1) == "0.8"
Status: UNCONFIRMED → NEW
Ever confirmed: true
(this may be caused by the fact that we can't represent 0.5 exactly as a 
floating-point number, of course, which would make this a duplicate of bug 
186563).
And in fact, it is. This bug (*exactly* this report, no less) is covered at
http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/number
.html#1207032

Extract:
"The IEEE 754 standard dictates that 0.045 be approximated to 
0.04499999999999999833466546306226518936455249786376953125, which is precisely 
representable as a binary fraction. This approximation is closer to 0.04 than 
to 0.05, so 0.045.toFixed(2) returns "0.04"."

INVALID.
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → INVALID
Marking Verified -

Michel, thank you for this report; this issue often comes up.
See bug 186563 for more discussion.

Malcolm, thank you for your research on this!
Status: RESOLVED → VERIFIED
Okeee, thanks. I did search for toFixed in bugzilla javascript and did no find it.

For information IE6 does round up since they are probably more pragmatic about
it and asks themselves what does the user expect rather than how is the number
represented in the IEEE 754 - which is why more nerds use mozilla (as do I) ;)
Severity: normal → critical
Status: VERIFIED → RESOLVED
Closed: 21 years ago17 years ago
Resolution: INVALID → DUPLICATE
You need to log in before you can comment on or make changes to this bug.