我有以下耶拿规则来执行加法:
@prefix pm: <http://example.org/ProductionMesure#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix pr: <http://example.org/Production#>.
[r1:
(?mesCavTur rdf:type pr:Mesure)
(?cavTur owl:ensemble_de ?mesCavTur)
noValue(?cavTur owl:valeur ?x)
->
(?cavTur owl:valeur 0.0)
]
[r2:
(?mesCavTur rdf:type pr:Mesure)
(?mesCavTur owl:valeur ?valeur)
noValue(?mesCavTur pm:flag pm:done)
(?cavTur owl:ensemble_de ?mesCavTur)
(?cavTur owl:valeur ?oldValeur)
sum(?valeur, ?oldValeur, ?somme)
->
drop(4)
(?cavTur owl:valeur ?somme)
(?mesCavTur pm:flag pm:done)
hide(pm:flag)
]
该规则几乎可以正常工作以执行所需的加法结果。我遇到的问题是传递给 sum 函数的值都是浮点数,但返回的值 (?somme) 以双精度形式返回。
出乎意料的结果是它在结果中添加了一个小的十进制数(我认为这与类型转换有关)。
例如,如果我想求三个值 2.2、2.5 和 2.7 的总和;我得到的结果是 7.1000000953674316 (接近但不太正确)。
有没有办法使用这个 Jena 规则,我可以将我的浮点值 (?valeur & ?oldValeur) 转换为 double 类型,然后使用这些新的 double 值执行 sum 函数,然后最终转换输出 (?somme)变成浮点值?
我认为这样做可能不会将额外的小数位添加到我的输出中。