我应该在这个简单的数学运算中使用十进制、浮点数还是双精度?

5

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

我正在对一些字节值(介于1<->5之间)进行求平均值,希望只记录2位小数。我不关心第二位小数的四舍五入问题(例如1.155等于1.5或1.6...我并不太在意)。

那么,我应该将平均结果存储为float、decimal还是double呢?当我检查LINQ返回的内容时,它可以返回所有这三个值!最后,请问相关的SQL数据类型字段应该是什么呢?

谢谢!


这些数字的意义是什么?这决定了十进制/双精度/其他类型的选择。 - Jacek Cz
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)表示可以使用十个数字,并且其中两个数字将被视为小数点后的数字。即,decimal(4,2) 可以包含的最大数字是99.99。试图将其设置为100将导致算术溢出。


DECIMAL(10,2)和FLOAT在字段大小上有什么区别?例如,它们都是4K吗? - Pure.Krome
你有一个小错字:"1.155 == 1.5 or 1.6" 应该是 "1.155 == 1.15 or 1.16"。 - JeffH
还有,“phased” 应该是 “fazed”,但问题出在原帖中,而不是这个回答中。 :) - Jonathan

1

在编程中,我会选择Float而不是Double,甚至可能会选择Float而不是Decimal。虽然所有这些类型都应该给出相同的结果,但我还是会选择Float。

可以查看这两个页面了解更多关于FloatsDecimals的信息。


1

十进制主要用于货币。虽然它可以工作,但人们可能会觉得困惑。在这种情况下,我认为浮点数会是一个更好的选择。


0

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


0

如果您想尽可能少地使用空间来存储结果,您可以尝试这样做(伪代码):

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

这将给你一个平均值为3.52的值,因此你可以将其存储为整数(我想字节足够大),并在显示时除以100。

另一方面,如果你不关心平均值的存储,使用浮点数值可能更快。 (测试两种方法,看看在你的系统上实际上哪个更快。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接