packages-semweb
packages-semweb copied to clipboard
rdf_literal_value/2 treats decimal numbers as floats
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.