bigint 的值是否会影响乘法/除法的性能?

问题描述

我需要创建一个函数,该函数以美分为单位将金额分配给许多人。我可以像这样定义一个非常基本的函数(它没有做太多,但它让我明白了)

g.io("graph.xml").write().iterate()

问题在于,如果 create table ledger( id bigserial primary key,amount bigint not null check (value > 0) ); create function distribute (num_cents bigint,num_people bigint) returns void as $$ begin insert into ledger ( amount ) values ( num_cents / num_people ); end $$ language 'plpgsql'; 那么我要么得到 0,要么得到一个分数。无论哪种方式,这都不是我想要的,并且会破坏我的代码。我想我有两个选择。 1,切换到浮点运算或 2,使用 bigint 并在概念上移动数字,就像这样

num_people > num_cents

这样,即使我们有 1B 个人可以分配,每个人也可以获得十亿分之一分,而不会产生分数。然后我要做的就是确保我不会让超过 1B 的用户注册(或将值增加到 1T)。

我这样做的动机是我不喜欢浮点数,我发现用整数算术对我来说更容易(例如,如果我知道美分的数量总是在 1 - 100 美分的范围内,并且用户数量是总是在 0-10 亿的范围内,那么我就不必担心舍入问题或办公空间消失的资金问题)。但我想知道在 Postgres 中运行 create function shift_then_distribute (num_cents bigint,num_people bigint) returns void as $$ begin insert into ledger ( amount ) values ( num_cents * 1000000000 / num_people ); end $$ language 'plpgsql'; distribute (1,1) 是否存在性能差异?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)