首页 > 解决方案 > PostgreSQL上浮点数的模运算

问题描述

我希望在 PostgreSQL 中的两个浮点整数之间执行模运算。具体来说,我希望强制执行角度算术,例如在一些数学运算之后强制角度位于区间 [0,2*pi] 内。

我可以看到fmodSQL 不正式支持此类。有什么合理的解决方法吗?

标签: postgresqlfloating-pointmodulo

解决方案


自己创建这样的函数很简单:

CREATE FUNCTION fmod (
   dividend double precision,
   divisor double precision
) RETURNS double precision
    LANGUAGE sql IMMUTABLE AS
'SELECT dividend - floor(dividend / divisor) * divisor';

您可以使用它来解决您的问题:

SELECT fmod(1000, 2.0 * pi());

       fmod        
-------------------
 0.973536158445768
(1 row)

这个函数可以内联,所以它应该非常有效。


推荐阅读