我正在尝试使用adodb将一些双重值从我的.NET项目保存到MS Access。 如果我有未初始化的值,我想将Double.MinValue作为默认值保存到我的访问数据库中。
问题是.NET和Access中的范围不同。 例如,对于.NET,minvalue是
-1.79769313486232e308
对于MS Access,minvalue是
-1.79769313486231E308
任何人都可以告诉我为什么会有差异,因为两者都使用8个字节...... 或者我的问题是否有任何解决方法。我想确保我的用户能够使用全系列的Double。因为他们不会知道他们“不被允许”使用Double.MinValue ......
提前感谢您的帮助!
答案 0 :(得分:4)
-1.7976931348623157e308.
当我问这个问题时,我看到了一个不值得信任的消息来源。问题是,在将Double.MinValue转换为字符串时,结果字符串为“-1.79769313486232e308”并将其转换为double会导致OverflowException。
您可以使用以下代码段
进行测试double dblVal = Double.MinValue;
string strVal = dblVal.ToString();
dblVal = Convert.ToDouble(strVal);
因此,我发送一个sql查询,以便将值存储在我正在进行此转换的访问中。
下次我应该更好地检查我的源代码(:似乎不可能通过sql语句发送Double.MinValue来访问。我在AccessInterface中做了一个解决方法。
答案 1 :(得分:2)
(请注意,这个原始答案是基于这样一个问题的前提:.NET和Access中可用的最小Double值之间存在差异。正如问题所有者的另一个答案中所述,这是实际上不是真的。)
我的猜测是差异只是一个模糊的实现细节。 VBA / VB6代码库比.NET代码库更老,构建VBA / VB6的人可能有
0.00000000000001
精度压缩到范围内,或者Double
范围减少了这个微不足道的数量。软件设计有时需要权衡利弊,所以也许最后0.00000000000001
被牺牲用于其他一些好处。真正的答案可能会在时间的迷雾中消失。
编辑re:其他答案中的陈述
似乎不可能通过sql语句发送Double.MinValue来访问。
虽然可能无法通过简单地在其上调用Double.MinValue
来创建包含字符串 literal 的SQL语句,但此代码确实可行(使用Access 2010数据库):
.ToString()