【问题标题】: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 这样的舍入错误的困扰
  • 如果您想要精度并且在小数点后有有限数量的预期值,如果您不关心精度,请使用小数点使用浮点数。搜索小数与浮点数以查看原因。
  • 由于某些物质在其他物质中的百分比不具有 2 位的精确精度,因此此处不适合使用小数类型。例如,您不能将 0.125 放在 decimal(5,2) 字段中,但可以放在浮点数中。建议小数的人都在想钱!
  • @Mr Lister:我也想钱(意思是省钱):)

标签: c# sql-server types entity-framework-4 sqldatatypes


【解决方案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 是近似值,会给出意想不到的结果
  • 十进制精确

参考资料:

【讨论】:

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