为什么SQL浮点数与C#浮点数不同

时间:2020-03-06 14:36:49  来源:igfitidea点击:

嗨,我有一个DataRow从数据集的数据表中拔出。我正在访问SQL中定义为float数据类型的列。我正在尝试将该值分配给局部变量(cfloat数据类型),但是正在获取InvalidCastExecption

DataRow exercise = _exerciseDataSet.Exercise.FindByExerciseID(65);
_AccelLimit = (float)exercise["DefaultAccelLimit"];

现在,我尝试使它起作用,但没有任何意义,感觉不正确。

_AccelLimit = (float)(double)exercise["DefaultAccelLimit"];

谁能解释我在这里想念的东西吗?

解决方案

根据SQLDbType的文档,SQL浮点数是double的。

SQL中的浮点数是CLR(C#/ VB)中的Double。 MSDN上有一张SQL数据类型表,其中包含CLR等效项。

Microsoft SQL Server中的浮点数等效于C#中的Double。原因是浮点数只能近似为十进制数,浮点数的精度决定了该数字近似十进制数的精度。 Double类型表示双精度64位浮点数,其值范围从负1.79769313486232e308到正1.79769313486232e308,以及正或者负零,PositiveInfinity,NegativeInfinity和非a(NaN)。

通常,如果我们计划对数据执行数学计算,因为它是不精确的数据类型,并且会引入计算错误,则通常不会在SQL Server中使用浮点数(或者实际值)。如果需要精度,请改用十进制数据类型。