Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQL数据库中存储度量数据时要使用什么数据类型?_C#_Sql Server_Sql Server 2012_Sqldatatypes - Fatal编程技术网

C# 在SQL数据库中存储度量数据时要使用什么数据类型?

C# 在SQL数据库中存储度量数据时要使用什么数据类型?,c#,sql-server,sql-server-2012,sqldatatypes,C#,Sql Server,Sql Server 2012,Sqldatatypes,我试图在SQLServer2012中存储度量数据(米、公里、平方米) 使用的最佳数据类型是什么浮点数(C#:双精度)、十进制(C#:十进制)甚至几何体?或者其他什么不同的?根据您的数据具有适当精度的decimal,或者int类型(如果合适)取决于您想做什么 float或double是不精确的数据类型(因此5.0==5.0可能由于舍入问题而为假) Decimal是一种精确的数据类型(因此5.0==5.0将始终为真) 几何/地理(简单地说)是指地图上的位置 浮点计算应该是这三种方法中最快的一种,因为

我试图在SQLServer2012中存储度量数据(米、公里、平方米)


使用的最佳数据类型是什么<代码>浮点数(C#:双精度)、
十进制
(C#:十进制)甚至
几何体
?或者其他什么不同的?

根据您的数据具有适当精度的
decimal
,或者
int
类型(如果合适)

取决于您想做什么
float或double是不精确的数据类型(因此5.0==5.0可能由于舍入问题而为假)
Decimal是一种精确的数据类型(因此5.0==5.0将始终为真)
几何/地理(简单地说)是指地图上的位置


浮点计算应该是这三种方法中最快的一种,因为地理数据是二进制数据,包含一些关于投影的信息(这里是关于地图的),从技术上讲,十进制数据不像浮点计算那么容易处理。

这完全取决于应用程序和所需的精度

如果我们谈论的是体系结构,那么精度需求相对有限,而
C#32位浮点
将需要很长的路要走。在SQL中,这转换为
float(24)
,也称为数据库类型
real
。此SQL DB类型要求每个条目有4字节的存储空间

如果我们想要定位地球表面的点,你需要更高的精度。这里适合使用
C#double
,它对应于
sqlfloat(53)
或只是
float
。这种SQL DB类型需要8字节的存储空间,只有在需要时或应用程序很小且磁盘/内存使用情况不受影响时才应使用

对于实际的SQL DB,
SQL十进制
is可能是一个很好的替代方案,但有两个缺点:

  • 它对应于
    C#Decimal
    ,这是一种专为财务用途设计的类型,用于防止舍入错误。这种设计使得C#Decimal类型在三角法等中使用时比float/double类型慢。当然,您可以在代码中来回转换,但这并不是IMO最直接的方法。

    “十进制值类型适用于需要大量有效整数和小数位数且无舍入误差的金融计算。”-
  • SQL DB type
    Decimal
    要求每个条目有5-9字节的存储空间(取决于使用的精度),比float(x)选项大
  • 所以,根据你的需要使用它。在你的评论中,你说这是关于房地产的,所以我选择了
    float(24)
    (又称
    real
    ),它正好是4个字节,直接转换成
    C#float
    。见:


    最后,这里有一个在.Net和SQL之间转换不同类型的有用资源:

    您需要多少精度?@Ren我真的不知道。我猜是两个,因为“150,00米”、“150平方米”或“12,93公里”的精度就足够了,这取决于。。。。你打算用这些数据做什么?@ColinMackay没什么。简单的比较,例如“20 squaremeter在这里查看可以使用的不同可用数据类型-不确定哪一种最适合您的需要,尽管我认为十进制很慢,直到有人提到它。十进制对会计很好,但长度和面积的公制单位是什么?也许不是。特别是,如果您要使用trig函数。Decimal非常慢,所以只有在绝对需要的情况下才应该使用它。“避免在WHERE子句搜索条件中使用浮点或实数列,尤其是=…”您有证据证明Decimal是“慢”的吗-我在100000行的表上看不到任何差异。有各种文档指出十进制的速度比纯形式的浮点慢。在SQL Server的上下文中,您可能是对的,这种差异可以忽略不计,因为SQL Server在内存或磁盘上按比例花费了更多的时间来提取数据,而不是对其执行计算或比较。提问者还需要考虑到它在SQL Server之外的使用,而不仅仅是它的存储。在没有指定精度的SQL中,什么是
    float
    ,为什么
    decimal
    的精度不够?如果
    decimal
    的精度低于
    float
    ,那么它不会快很多吗?SQL float(在某种程度上)相当于C#double。也就是说,它有一个相当高的进动。SQL中的C#float称为“real”,与“float(24)”相同。SQL Decimal对应于一个C#Decimal,它是为满足财务需求而设计的,比C#double“慢”。没有指定的参数,
    float
    是什么?
    浮点值的默认精度是多少?我的SQL列的类型是
    float
    ,而不是
    float(24)
    没有任何指定精度的float等于float(53),也就是C#double。好吧,对于房地产(平方米),你建议在SQL中使用
    float(24)
    (或者
    real
    -哪一种是最常见的?),因此使用C#
    float
    ,对吗?