5

我正在做一些非常简单的数学运算并将结果保存到 MS SQL2008 DB。

我正在平均一些数字,它们是 1<->5 之间的字节值。我希望只记录小数点后 2 位。我不关心小数点后第二位的四舍五入(例如 1.155 == 1.5 或 1.6 .. 我不太分阶段)。

所以..我应该将平均结果存储为浮点数、小数还是双精度?

当我检查 LINQ 返回的内容时,它可以返回所有三个值!

最后,还有什么是相关的 SQL 数据类型字段。

干杯!

4

5 回答 5

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 将导致算术溢出。

于 2008-12-04T15:59:01.737 回答
1

我会选择浮点数而不是双精度数,可能是浮点数而不是十进制数:。Id 去 Floatalthough 都应该给出相同的结果。

看看这两个页面的浮点数小数

于 2008-12-04T11:41:54.877 回答
1

小数主要用于货币。虽然它会起作用,但人们可能会感到困惑。在这种情况下,我认为浮动会是一个更好的选择。

于 2008-12-04T16:02:56.893 回答
0

十进制 - 这是最简单的,但是任何提到的都可以完成这项工作

于 2008-12-04T11:32:44.367 回答
0

如果您想使用尽可能少的空间存储结果,您可以执行以下操作(伪代码):

integer = ( sum(all_values) / all_values.count().float ) * 100;

这将为您提供平均 3.52 的值 352,因此您可以将其存储为整数(我猜字节会足够大),当您想要显示它时只需将其除以 100。

另一方面,如果您不关心平均值的存储,则使用浮点值可能会更快。(测试两者以查看您的系统上实际最快的是什么。)

于 2008-12-04T11:43:32.907 回答