我正在进行一些非常简单的数学运算,并将结果保存到MS SQL2008数据库中。
我正在对一些字节值(介于1<->5之间)进行求平均值,希望只记录2位小数。我不关心第二位小数的四舍五入问题(例如1.155等于1.5或1.6...我并不太在意)。
那么,我应该将平均结果存储为float、decimal还是double呢?当我检查LINQ返回的内容时,它可以返回所有这三个值!最后,请问相关的SQL数据类型字段应该是什么呢?
谢谢!
我正在进行一些非常简单的数学运算,并将结果保存到MS SQL2008数据库中。
我正在对一些字节值(介于1<->5之间)进行求平均值,希望只记录2位小数。我不关心第二位小数的四舍五入问题(例如1.155等于1.5或1.6...我并不太在意)。
那么,我应该将平均结果存储为float、decimal还是double呢?当我检查LINQ返回的内容时,它可以返回所有这三个值!最后,请问相关的SQL数据类型字段应该是什么呢?
谢谢!
declare @val decimal(10,2)
select @val = 10.155
select @val
当您输入值时,可以依靠内置的四舍五入功能,或明确决定要使用哪种舍入:
select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated
十进制数(10,2)表示可以使用十个数字,并且其中两个数字将被视为小数点后的数字。即,decimal(4,2) 可以包含的最大数字是99.99。试图将其设置为100将导致算术溢出。
十进制主要用于货币。虽然它可以工作,但人们可能会觉得困惑。在这种情况下,我认为浮点数会是一个更好的选择。
十进制 - 它是最简单的,但是任何一个提到的都可以完成工作
如果您想尽可能少地使用空间来存储结果,您可以尝试这样做(伪代码):
integer = ( sum(all_values) / all_values.count().float ) * 100;
这将给你一个平均值为3.52的值,因此你可以将其存储为整数(我想字节足够大),并在显示时除以100。
另一方面,如果你不关心平均值的存储,使用浮点数值可能更快。 (测试两种方法,看看在你的系统上实际上哪个更快。)