gpt4 book ai didi

oracle - oracle计算mod(binary_float, 0)的方式

转载 作者:行者123 更新时间:2023-12-02 01:50:17 25 4
gpt4 key购买 nike

Oracle 文档 (http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions088.htm#i77996) 说“MOD 返回 n2 除以 n1 的余数。如果 n1 为 0,则返回 n2。”。但是当我在 n2 中放入一个 binary_float 时,我得到了一个意想不到的结果(我认为它应该是 1.1 但我得到的是 0)。

SQL> select mod(1.1,0), to_binary_float('1.1'), mod(to_binary_float('1.1'), 0) from dual;

MOD(1.1,0) TO_BINARY_FLOAT('1.1') MOD(TO_BINARY_FLOAT('1.1'),0)
---------- ---------------------- -----------------------------
1.1 1.1E+000 0

有人知道吗?

最佳答案

很有趣。我认为这与计算中内部使用的 FLOOR 与 ROUND 有关。

例如,REMAINDER 函数与 mod 非常相似,只是使用 ROUND 而不是 FLOOR。对于这个例子,它将返回 NAN(不是数字):

select remainder(to_binary_float(1.1), 0) from dual

输出:

NAN

更有趣的是,如果返回 NAN,我可以使用 NANVL 函数提供默认值(在这种情况下,模仿 MOD 行为并返回 1.1),它将返回一个浮点值:

select nanvl(remainder(to_binary_float(1.1), 0), 1.1) from dual

输出:

1.10000002384186

也许这就是您的解决方法。

希望对你有帮助

关于oracle - oracle计算mod(binary_float, 0)的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23194529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com