首页新闻找找看学习计划

今天遇到一个问题需要高人指点

0
悬赏园豆:30 [已解决问题] 解决于 2017-11-24 11:08

环境:sqlserver 2017.net core 2.0,EF core 2.0
1.数据库中字段类型是float的(可空),对应实体类型也是用的float的(可空),程序启动起来就报错,日志详情为:An exception occurred while reading a database value for property 'XXXXXX'. The expected type was 'System.Nullable`1[System.Single]' but the actual value was of type 'System.Double'. ---> System.InvalidCastException: Unable to cast object of type 'System.Double' to type 'System.Nullable`1[System.Single]'.
于是我把字段类型改为Double解决了。
很好奇这个问题的原因是什么??
还有顺便问一下doubleDouble有什么不同??

<items>的主页 | 初学一级 | 园豆:127
提问于:2017-11-24 09:45
< >
分享
最佳答案
0

数据库的字段: 

类型:float    代表从 - 1.79E + 308 到 1.79E + 308 之间的浮点数字数据。(占用8字节) 
类型:real     代表从 -3.40E + 38 到 3.40E + 38 之间的浮点数字数据。(占用4字节)

而C#中: 
类型:double 代表从 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字(8字节)

类型:float    代表从 -3.402823e38 和 +3.402823e38 之间的单精度 32 位数字(4字节)

就是说数据库中没有double型,float就表示double值。 
sql server数据库字段类型与.net的数据类型的对应关系:

real(数据库)<--> float(.NET) 
float(数据库)<--> double(.NET)

收获园豆:10
hahanonym | 小虾三级 |园豆:1460 | 2017-11-24 10:53
其他回答(3)
0

System.Nullable`1[System.Single]

System.Double

一个是可为空的 Single

一个是Double,差别老大了。

收获园豆:5
爱编程的大叔 | 园豆:30493 (高人七级) | 2017-11-24 09:56

不不不 ,这个我知道,只是为什么数据库中字段类型是float的,EF实体类的类型为什么不能用float的?

支持(0) 反对(0) | 园豆:127 (初学一级) | 2017-11-24 10:47
0

emm 因为 Sqlserver 的 float 最大可以是 8 字节.

收获园豆:10
长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-11-24 10:09

这个我知道,只是为什么数据库中字段类型是float的,EF实体类的类型为什么不能用float的?

支持(0) 反对(0) | 园豆:127 (初学一级) | 2017-11-24 10:47

@<items>: .Net 里面的 float 是4个字节.

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-11-24 10:48
0

System.Single就是float 

“System.InvalidCastException”

你想把double转成float?放不下啊!

收获园豆:5
西漠以西 | 园豆:1670 (小虾三级) | 2017-11-24 10:37

这些我都知道。只是为什么数据库中字段类型是float的,EF实体类的类型为什么不能用float的? 这才是重点!!

支持(0) 反对(0) | 园豆:127 (初学一级) | 2017-11-24 10:49

@<items>: 

”程序启动起来就报错”,那就调试啊,看异常出现在哪一行代码上。

我猜,是Seed里面或者其他“程序启动”时执行的代码里面,你给float类型的某个属性设置了 小数的字面值,比如 3.5

但是你没加 F 后缀,编译器理解为double类型了 。

支持(0) 反对(0) 西漠以西 | 园豆:1670 (小虾三级) | 2017-11-24 11:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册