【问题标题】:Postgresql: Double.MinValue is out of range for type double precisionPostgresql:Double.MinValue 超出双精度类型的范围
【发布时间】:2019-10-22 05:11:59
【问题描述】:

我有一个参数双精度的 postgres 函数。有时我想从服务器端 [Double.MinValue] c# 代码传递 double 的最小值。 现在我面临以下问题

-179769313486232000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" 超出了双精度类型的范围

双精度参数的输入是 Double.MinValue。

函数如下所示

CREATE OR REPLACE FUNCTION public.insert_double_value(
    strtidx double precision,
    endidx double precision)
    // other logic goes below

有没有办法解决这个问题?

【问题讨论】:

  • 是使用适当的时间postgresql.org/docs/current/…
  • 为什么不传递 null 呢?无论您附加到 minvalue 的含义是什么,都将其附加到 null 并适当处理
  • @CaiusJard 以这种方式滥用NULL 通常是个坏主意。查询变得复杂,直方图无法反映实际情况。
  • 我不认为我们有任何方法可以知道 minvalue 的情绪是什么以及 null 是否可以很好地代替,但这是我们正在讨论的 sp 的参数而不是集合可能/不为空且有统计数据的数据

标签: c# postgresql


【解决方案1】:

问题很可能是在将double precision 值转换为字符串时出现舍入错误。

改为传递'-infinity'。这是一个定义明确的 double precision 值,可能更能表达您的意图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2014-05-27
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多