SQL 浮点数与 C# 双精度不同,如何处理无穷大的值

本文关键字:处理 无穷大 何处理 浮点数 双精度 SQL | 更新日期: 2023-09-27 18:34:36

显然,SQL浮点数与C#双精度值并不完全相同,因为它们不能容纳无穷大的值。

我有一个非常简单的数学模型来处理概率和返回周期。

什么时候

Double Probability = 0d

那么根据定义:

Double ReturnPeriod = Double.PositiveInfinity

当这些属性映射到插入命令的浮点参数时,我在尝试执行该过程时在数据服务级别出现错误:

传入表格数据流 (TDS( 远程过程调用 (RPC( 协议流不正确。参数 134 ("@RETURNPERIOD"(:提供的值不是数据类型 float 的有效实例。检查源数据中是否存在无效值。无效值的一个示例是小数位数大于精度的数值类型的数据。

我该如何解决这个问题?我不想诉诸任何荒谬的事情,例如更改模式来存储 ReturnPeriod 的字符串表示形式,或者为每个浮点数添加一个辅助列来存储它是 +Inf、-Inf 还是 NaN。

像这样的2006年旧帖子并没有真正帮助我。

SQL 浮点数与 C# 双精度不同,如何处理无穷大的值

我认为

当他们说SQL浮点数等同于Double时,它们的含义是它们的表示是相似的(使用mantis和指数以及64位编码(。

我建议使用Double.MaxValue作为正无穷大,使用Double.MinValue作为负无穷大。我怀疑您是否会在模型中使用这些值。