在这种情况下我应该使用啥正确的数据类型?

Posted

技术标签:

【中文标题】在这种情况下我应该使用啥正确的数据类型?【英文标题】:What's the correct data type I should use in this case?在这种情况下我应该使用什么正确的数据类型? 【发布时间】:2012-01-29 04:15:28 【问题描述】:

我必须在我的数据库中表示数字,即食物中化学物质的数量,如脂肪、能量、镁等。这些值是格式为 12345.67 的小数。

如果我在 SQL Server 中使用 decimal (5,2) 作为数据类型,它会映射到实体框架中的 Decimal 类型。如果我在 SQL Server 中使用 float 作为数据类型,它会映射到 Entity Framework 中的Double

我不确定 SQL Server 中最好的数据类型是什么,或者它真的很重要吗?

编辑 - 在我的情况下,它应该是 decimal(7,2),正如一些评论中提到的那样!

谢谢。

【问题讨论】:

DECIMAL 通常是首选 - 它不会受到像 FLOAT 这样的舍入错误的困扰 检查***.com/questions/618535/… 如果您想要精度并且在小数点后有有限数量的预期值,如果您不关心精度,请使用小数点使用浮点数。搜索小数与浮点数以查看原因。 由于某些物质在其他物质中的百分比不具有 2 位的精确精度,因此此处不适合使用小数类型。例如,您不能将 0.125 放在 decimal(5,2) 字段中,但可以放在浮点数中。建议小数的人都在想钱! @Mr Lister:我也想钱(意思是省钱):) 【参考方案1】:

DECIMAL(7,2) 会比 float 更好 - 这正是您所需要的(5 + 2 位数字)。对于浮动类型(例如 float、double),您可能会遇到一些问题 - 例如带四舍五入。

【讨论】:

其实:DECIMAL(5,2) 的意思是:总共 5 位 - 其中两位在小数点之后 - 所以实际上是 3+2 位(不是 5+2)! 好的,这不会导致计算中的性能问题,因为我读到十进制是 .NET 中最慢的类型? DECIMAL(5,2) 最多只能存储 999.99,总共 5 位,小数点后两位 (msdn.microsoft.com/en-us/library/ms187746.aspx)【参考方案2】:

你需要decimal(7,2)

7 是总位数 2 在小数点后

区别:

float 是近似值,会给出意想不到的结果 十进制精确

参考资料:

Accuracy problem with floating numbers SQL Server Float data type calculation vs decimal

【讨论】:

谢谢。我读到 Decimal 是最精确的类型,但是如果我使用 Decimal(7,2),是否意味着 sql server 中不需要很多存储空间?在那种情况下,我还读到 Decimal 是 .NET 中最慢的,如果我在计算中需要这些数字,这会成为问题吗? @Lud: decimal(7,2) 需要 9 个字节的存储空间。浮点数为 8 个字节。考虑到准确性,差别不大。除非您拥有大量数据,否则我不会担心 .net 中的性能。即使这样,.net 对 double 的数学处理也比 SQL Server 好得多,因此您可以将十进制存储在数据库中,但如果需要,可以在.net 中处理 double @Cicada,不明白你的评论……这是一个商业应用程序,所以..? @Lud 我的意思是货币/金融,而不是商业。已编辑。

以上是关于在这种情况下我应该使用啥正确的数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

对于只接受少数值的列,应该在 Google 大查询中使用啥数据类型?

在啥情况下我应该使用尝试而不是二叉树/哈希表? [复制]

在这种情况下我应该标准化我的数据库吗? [关闭]

在这种情况下我应该使用左连接吗?

在这种情况下我应该使用顶点着色器吗?

我应该使用啥列类型/长度将 Bcrypt 散列密码存储在数据库中?