Re: Bug: Bad N-Triples Float Representation

I've tracked down the source of this behavior.

In llyn.RDFStore.intern() a float Literal is created by doing repr() on
the float number. (See llyn.py line 1381 in current cvs.) Thus, when
54321.12345 gets put into a Literal, it's stored as the string
'54321.123449999999'.

In notation3.ToN3.representationOf(), two different things are happening
to that Literal. (See notation3.py lines 1529 to 1542 in current cvs.)
With --ntriples, the n flag is set, so '54321.123449999999' is sent
straight to stringToN3 to be output. However, without the n flag set (as
in the second example), str(float(s)) with s == '54321.123449999999' is
done, so Python will return the stored string to a float, and then
convert back into a string, but because we're using str, Python will see
all the 9s and round.

The question becomes whether we should do the same prettying regardless
of the flag n. The documentation for n is that it mandates "no numeric
syntax - use strings typed with ^^ syntax." Does this preclude our
rounding of the binary-precision float to a very close much shorter
decimal version?

Received on Friday, 10 June 2005 07:12:37 UTC