我正在做一些非常简单的数学运算并将结果保存到 MS SQL2008 DB。
我正在平均一些数字,它们是 1<->5 之间的字节值。我希望只记录小数点后 2 位。我不关心小数点后第二位的四舍五入(例如 1.155 == 1.5 或 1.6 .. 我不太分阶段)。
所以..我应该将平均结果存储为浮点数、小数还是双精度?
当我检查 LINQ 返回的内容时,它可以返回所有三个值!
最后,还有什么是相关的 SQL 数据类型字段。
干杯!
我正在做一些非常简单的数学运算并将结果保存到 MS SQL2008 DB。
我正在平均一些数字,它们是 1<->5 之间的字节值。我希望只记录小数点后 2 位。我不关心小数点后第二位的四舍五入(例如 1.155 == 1.5 或 1.6 .. 我不太分阶段)。
所以..我应该将平均结果存储为浮点数、小数还是双精度?
当我检查 LINQ 返回的内容时,它可以返回所有三个值!
最后,还有什么是相关的 SQL 数据类型字段。
干杯!
您需要的是 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 将导致算术溢出。
小数主要用于货币。虽然它会起作用,但人们可能会感到困惑。在这种情况下,我认为浮动会是一个更好的选择。
十进制 - 这是最简单的,但是任何提到的都可以完成这项工作
如果您想使用尽可能少的空间存储结果,您可以执行以下操作(伪代码):
integer = ( sum(all_values) / all_values.count().float ) * 100;
这将为您提供平均 3.52 的值 352,因此您可以将其存储为整数(我猜字节会足够大),当您想要显示它时只需将其除以 100。
另一方面,如果您不关心平均值的存储,则使用浮点值可能会更快。(测试两者以查看您的系统上实际最快的是什么。)