追加を実行するための次の Jena ルールがあります。
@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 関数に渡される値が両方とも float であるのに、返される値 (?somme) が double として返されることです。
これによる予期しない結果は、結果に小さな 10 進数が追加されることです (これは型変換と関係があると思います)。
たとえば、2.2、2.5、および 2.7 の 3 つの値の合計を求めたいとします。私が得た結果は 7.1000000953674316 です (これは近いですが、まったく正しくありません)。
この Jena ルールを使用して、float 値 (?valeur & ?oldValeur) を double 型に変換し、これらの新しい double 値で sum 関数を実行し、最後に出力 (?somme) を変換する方法はありますか?フロート値に?
これを行うことで、余分な小数点以下の桁数が出力に追加されない可能性があると思います。