- From: Philip Taylor <pjt47@cam.ac.uk>
- Date: Mon, 29 Dec 2008 23:18:50 +0000
- To: HTML WG <public-html@w3.org>
The definition of "valid floating point number" does not allow numbers like "1e+10", and the "rules for parsing floating point number values" will not accept the "+" and will parse it into the number 1. Many (most? all?) programming languages serialise large floating-point numbers using "+". So if I write something straightforward in Perl like: $total_disk_space = 2**50; $used_disk_space = 819845012984561; print qq{Disk usage: <meter min="0" max="$total_disk_space" value="$used_disk_space"></meter>}; then I'll get <meter min="0" max="1.12589990684262e+15" value="819845012984561">, which will work very badly since 'max' won't be parsed as expected. The same kind of problem can occur in Python, like: total_disk_space = 2.0**50 used_disk_space = 819845012984561.0 print 'Disk usage: <meter min="0" max="%s" value="%s"></meter>' % (total_disk_space, used_disk_space) which gives <meter min="0" max="1.12589990684e+15" value="8.19845012985e+14">. The same happens in JS (if the numbers are slightly larger). It also affects parsing of reflected attributes, so meter.setAttribute('value', meter.value) and meter.setAttribute('value', 2*meter.getAttribute('value')) will break if the initial value is large, which is surprising. To avoid the problem, I'd have to be aware that it's a problem in the first place (most likely by writing the code while unaware, and then hopefully discovering the bug sooner rather than later), and then I'd have to write a function that strips the "+" from the serialised string, which is ugly. Thus, it would be better for authors if "+" was allowed in floating point number attributes. -- Philip Taylor pjt47@cam.ac.uk
Received on Monday, 29 December 2008 23:19:48 UTC