我正在做一些非常简单的数学运算并将结果保存到MS SQL2008数据库。
我平均输出一些数字,这些数字是1< - > 5之间的字节值。我希望只记录2位小数。我不关心舍入小数点后第二位(例如,1.155 == 1.5或1.6 ..我不是太分阶段)。
那么..我应该将平均结果存储为float,decimal还是double?
当我检查LINQ返回的内容时,它可以返回所有三个值!
最后,相关的SQL数据类型字段也是如此。
喝彩!
答案 0 :(得分:2)
您需要的是DECIMAL数据类型:
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)表示可以使用十位数,并且其中两位将被视为小数点后面的数字。即十进制(4,2)可包含的最高数字是99.99。尝试将其设置为100将导致算术溢出。
答案 1 :(得分:1)
我会选择Float over Double并且可能Float over Decimal:我想去Floatalthough所有应该给出相同的结果。
答案 2 :(得分:1)
十进制主要用于货币。虽然它可行,但人们可能会发现它令人困惑。在这种情况下,我认为浮动将是一个更好的选择。
答案 3 :(得分:0)
十进制 - 这是最简单的,但任何精神都会完成工作
答案 4 :(得分:0)
如果你想使用尽可能小的空间存储结果,你可能会做这样的事情(伪代码):
integer = ( sum(all_values) / all_values.count().float ) * 100;
这将为您提供平均值为3.52的值352,因此您可以将其存储为整数(我想这个字节足够大),并且当您想要显示它时,将它除以100。
另一方面,如果您不关心平均值的存储,则使用浮点值可能更快。 (测试两者以查看系统中实际上最快的内容。)