gpt4 book ai didi

sql - 根据最小数字的精度将数量添加到数字

转载 作者:行者123 更新时间:2023-11-29 12:11:18 24 4
gpt4 key购买 nike

假设我得到值 2 作为 NUMERIC。我想将 0.0001 添加到此 2 以获得 2.0001。如果我得到 2.01,我想向它添加 0.000001 以获得 2.010001

基本上,我想添加一个比数字的最后一位(最高精度数字)小 4 个数量级的数字。

对于 2.000 的奇怪情况,我可以得到 2.00012.0000001

我调查过的东西

我考虑过是否有某种方法可以使用 PostgreSQL 数据类型函数提取此信息,但我找不到任何方法。

我也试着想出一些计算它的数学方法。我考虑过 log,但这会给我有关最高数量级数字的信息,而不是最低数量级的数字。

背景

这是信息性的。我之所以提供,是因为如果我看到其他人问这个问题,我的第一个想法就是,“他们究竟想做什么?”

我完全知道这是一个非常奇怪的用例。我面临的问题是,由于一些奇怪的精度问题,我经常通过 PostGIS 从 GEOS 收到 TopologyException。 (这与我的输入数据不是特别干净有关。不幸的是,我正在处理大量数据并且“检测并手动修复问题几何”不是一种选择。)我正在处理的值(value)是实际上是一个公差参数。它被送入缓冲区和捕捉功能。奇怪的是,将它改变这么小的量通常足以克服错误并获得我需要的结果。我打算在我的一些操作中构建一种稍微改变值的重试机制,希望避免这些错误。所以我想弄清楚如何计算这个略有变化的值。

最佳答案

我想在没有 pow() 的情况下做到这一点。函数中的查询仅使用文本操作和强制转换。它捕获整数的特殊情况。

create or replace function add_4_pos_digits (val numeric)
returns numeric language sql as $$
select val+ ('.' || repeat('0', d) || '1')::numeric
from (
select case d when 0 then 3 else d+ 2 end d
from (
select strpos(reverse(rtrim(val::text, '0')), '.') d
) q
) q;
$$;

create table example (val numeric);
insert into example values (1), (1.1), (1.01), (1.00001);

select val, add_4_pos_digits(val)
from example;

val | add_4_pos_digits
---------+------------------
1 | 1.0001
1.1 | 1.10001
1.01 | 1.010001
1.00001 | 1.000010001
(4 rows)

关于sql - 根据最小数字的精度将数量添加到数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33378766/

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