我有一个需要转换为当前形式的数据库表。该表具有三列 Double 类型(Pervasive.SQL
如果有人关心的话,它是 )。
我的问题是这张表已经存在了很长时间,并且它已经被代码可以追溯到大约 15 年或更长时间。
从历史上看,我们一直使用Double.MinValue
(或当时任何等效的语言)来表示"blank"
用户提供的值。换句话说,值的缺失实际上存储为我们以后可以识别并智能地做出反应的值。
所以,今天我的问题是我需要遍历这些记录并将它们插入到一个新创建的表中(这就是我所说的“转换”)。但是,我在要转换的表中没有看到一致的值。以下是我肯定知道的:
2.2250738585072014E-308
3.99285938963E-313
3.99099435427E-313
1.1125369292536007E-308
-5.389000690742776E279
2.104687961E-314
现在,我认识到Double.MinValue
可能存在或至少可以代表其他方式。做了一些谷歌搜索后,我发现第一个是Double.MinValue
(实际上DBL_MIN
在这里引用:http: //msdn.microsoft.com/en-us/library/6bs3y5ya (v=vs.100).aspx )的另一种表示。
我不想太啰嗦,所以如果这些信息不足以帮助我,我会提出问题。可以这么说,我需要一种可靠的方法来发现所有先前的“最小值”值,并Double.MinValue
在循环这些数据行时将它们替换为 C# 常量。
如果证明是dataRow["Value"] < someConstant
,那就这样吧。但我会让数学理论家帮助我下定决心。
谢谢你的时间。
编辑:
当我找到它们时,这就是我对这些值所做的事情。它是组装要写入数据库的值的通用方法的一部分:
else if (c.DataType == typeof(System.Double))
{
if (inRow[c] == DBNull.Value)
retString += @"NULL";
else
{
Double d;
if (Double.TryParse(inRow[c].ToString(), out d))
retString += d.ToStringFull();
}
}
直到现在,它只是简单地接受了他们。这很糟糕,因为当应用程序找到它们时,它们看起来像是可接受的数据,而不像Double.MinValue。因此,不被视为空白。但这就是他们。