这个简单的数学结果我应该使用decimal,float还是double?

时间:2008-12-04 11:27:21

标签: .net floating-point double decimal

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

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

那么..我应该将平均结果存储为float,decimal还是double?

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

最后,相关的SQL数据类型字段也是如此。

喝彩!

5 个答案:

答案 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所有应该给出相同的结果。

查看Floats&的这两页。 Decimals

答案 2 :(得分:1)

十进制主要用于货币。虽然它可行,但人们可能会发现它令人困惑。在这种情况下,我认为浮动将是一个更好的选择。

答案 3 :(得分:0)

十进制 - 这是最简单的,但任何精神都会完成工作

答案 4 :(得分:0)

如果你想使用尽可能小的空间存储结果,你可能会做这样的事情(伪代码):

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

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

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