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

5
我需要在我的数据库中表示化学物质的数量,例如食物中的脂肪、能量、镁等。这些值是小数,格式为12345.67。
如果我在SQL Server中使用数据类型为decimal(5,2),则它会映射到Entity Framework中的Decimal类型。如果我在SQL Server中使用float作为数据类型,则它将映射到Entity Framework中的Double
我不确定SQL Server中最好的数据类型是什么,或者它是否真的很重要?
编辑 - 在我的情况下应该是decimal(7,2),正如一些评论中提到的!
谢谢。

3
通常情况下,人们更喜欢使用DECIMAL而不是FLOAT,因为它没有像FLOAT那样受到舍入误差的困扰。 - marc_s
2
检查https://dev59.com/uXRB5IYBdhLWcg3wc280 - gsharp
如果您希望精确表示并且在小数点后具有有限数量的预期值,请使用 decimal;如果您不关心精度,则可使用 float。搜索 decimal vs float 以了解其原因。 - xQbert
由于某些物质在其他物质中的百分比没有精确到小数点后两位,因此十进制不是这里的正确类型。例如,您不能将0.125放入十进制(5,2)字段中,但可以放入浮点数中。建议使用十进制的人都在考虑钱! - Mr Lister
@Mr Lister:我也考虑过省钱的问题 :) - L-Four
那么,业务要求是什么?您是否需要对这些化学物质进行数学计算并需要保持一定的精度,还是它们已经被舍去“不重要”的数字而成为“估计值”?如果已经舍去了不重要的数字,则浮点数就可以了,因为您存储的值已经不精确。您只需要知道在呈现结果时需要四舍五入;纯数学可能不能正确计算由于浮点数的不精确性。 - xQbert
2个回答

11

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

4

DECIMAL(7,2)比float更好 - 它恰好符合您的需求(5 + 2位数字)。使用浮点类型(例如float,double)可能会遇到一些问题 - 例如舍入。


实际上,“DECIMAL(5,2)”表示:总共有5个数字,其中小数点后面有两个数字,因此它实际上是3+2个数字(不是5+2个数字)! - marc_s
好的,那么这不会在计算中引起性能问题吗?因为我读到 decimal 是 .NET 中最慢的类型。 - L-Four
DECIMAL(5,2) 最多只能存储到999.99,它是总共5位数字,有两位小数的比例。(http://msdn.microsoft.com/en-us/library/ms187746.aspx) - Anthony Shaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接