【发布时间】:2009-07-16 14:35:12
【问题描述】:
我在这里遇到了一些奇怪的问题。我有一个数据库表,它在列上存储了巨大的价值。我的应用程序 (C#) 正在读取这个值并保持 double 类型。此应用程序会将相同的值插入到另一个表中。注意:我没有对从第一个表中读取的值进行任何计算/处理。它只是用于更新第二个表。
这里的问题是,第二个表的值与第一个表的值略有不同。当我保持双重类型时,看起来数字正在四舍五入。
这是一个值的示例。
原始值:18014398509481984
值已复制到新表:18014398509482000
这些值看起来不同,但实际上两者都是相同的。我用 18014398509481984 - 18014398509482000 作为搜索词进行了谷歌搜索,它返回了结果 0,这意味着是一样的。
问题:
1 - 如果两者相同,为什么第二个值看起来不同?我可以看到 1984 变成了 2000。
2 - 为什么会发生转换?
3 - 如何避免此类转化?
任何帮助都会很棒!
【问题讨论】:
-
第一个表中的列的类型是什么?在第二张桌子上?看起来有一个从大整数(64 位)到双精度的转换,即使没有任何处理,也会在运算中丢失精度。
-
“所有数字都是平等的”——你可以通过这种方式轻松证明——是下一次选举的绝佳平台
-
是的,请尝试 Decimal,并检查 DB(您在那里使用哪种类型,顺便说一句?)和 .Net 类型的精度,以查看转换可能会改变值的位置
-
使用 Windows 计算器,您可以看到数字不相等。只是 Google 与您的软件具有相同的舍入行为。当值太大而无法放入 32 位整数时(显然),它使用双精度浮点值。
-
或者使用wolframalpha.com而不是谷歌来做数学。