我有一个代表特定数据库表的类。该类中的某些属性以及数据库表中的某些字段是双精度类型。
在这里,在课堂上,您会看到一些属性具有 1 个有效数字,例如。T12、T13、T18、T19(0.8、12.1 等)。
但是,当我执行将此类插入数据库表时,Linq2Db
会产生这样的查询:
当我查看数据库表时,字段包含正确的一位有效数字值:
我完全知道浮点数是如何以二进制格式表示的。我已经阅读文章为什么浮点数不准确?.
我的问题:
为什么类中的双重类型表示(T12 = -0.8)与“Linq2Db”操作后的表示不同(T12 = -0.800...004)?
在数据库中保存这样的双重值是否安全?(我想防止值不准确)
为什么查询中的值和数据库表中的值之间存在差异?
编辑1:
这是数据库查询的结果。15 位有效数字(全 0)与 17 位有效数字(上图)。Access 不能显示超过 15 位数字。
编辑2:
Decimal 0.8
Class Double 0.8
Floating-Point Double 0.8000000000000000444089209850062616169452667236328125
Floating-Point Single 0.800000011920928955078125 (for comparison)
SQL Query 0.80000000000000004 (!) => 17 digits after point (why?)
MS Access 0.800000000000000 = 0.8 => 15 digits after point
为什么类中的双精度类型可以是 0.8,但是没有任何操作或算术运算的相同值插入到数据库中为 0.80000000000000004?'Linq2Db' 用它做什么?