如何在Chainlink任务中计算数值倒数?结果异常为1求助
解决Chainlink任务计算倒数返回错误结果的问题
问题原因
你的divide任务中,input参数使用了字符串"1",会被Chainlink识别为整数类型;同时parse得到的浮点数1.022015在参与整数除法时会被取整为1,导致1/1=1,最终后续multiply任务只能得到1e18。
修正方案
方案一:直接修正浮点数运算参数
将divide任务的input改为浮点数格式"1.0",确保运算以浮点数逻辑执行,同时调整精度参数保证结果准确性:
parse [type="jsonparse" path="quotes,USDEUR" data="$(fetch)"] inverse [type="divide" input="1.0" divisor="$(parse)" precision="18"] multiply [type="multiply" input="$(inverse)" times=1000000000000000000 precision="0"]
input="1.0":明确告知Chainlink按浮点数处理被除数precision="18":保留足够小数位避免精度丢失- 最终
multiply的precision="0"输出整数格式的目标结果
方案二:采用整数运算(Chainlink最佳实践)
Chainlink喂价通常使用整数运算避免浮点误差,可通过转换精度合并运算步骤:
parse [type="jsonparse" path="quotes,USDEUR" data="$(fetch)"] convert_to_wei [type="multiply" input="$(parse)" times=1000000000000000000 precision="0"] inverse [type="divide" input="1000000000000000000000000000000000000" divisor="$(convert_to_wei)" precision="0"]
convert_to_wei:将原浮点数转换为18位精度的整数(1.022015 → 1022015000000000000)input="1e36":通过1e36 / 转换后整数直接得到(1/原数)*1e18的结果,无需额外乘法步骤
内容的提问来源于stack exchange,提问作者Prasanth Venugopalan
相关产品推荐
相关产品推荐

