packages-semweb icon indicating copy to clipboard operation
packages-semweb copied to clipboard

rdf_literal_value/2 treats decimal numbers as floats

Open wouterbeek opened this issue 10 years ago • 0 comments

rdf_literal_value/2 treats decimal numbers as floats:

?- rdf_literal_value(literal(type(xsd:decimal,'0.99999999999999999')), X).
X = 1.0.

Prolog supports rationals that can accurately represent decimal numbers, as used by plXsd:

?- xsd_lexical_map(xsd:float, '0.3333333333333333', X), Y is X * 3.
X = 0.3333333333333333,
Y = 1.0.

?- xsd_lexical_map(xsd:decimal, '0.3333333333333333', X), Y is X * 3.
X = 3333333333333333 rdiv 10000000000000000,
Y = 9999999999999999 rdiv 10000000000000000.

wouterbeek avatar Aug 01 '15 20:08 wouterbeek