我应该使用十进制浮点或者双精度为这个简单的数学结果呢?
-
19-08-2019 - |
题
我在做一些非常简单的数学和结果保存到MS SQL2008数据库。
我平均出一些数字,它们是1之间的字节值< - > 5。我想大概只记录2位小数。我不关心有关舍入为第二小数位(例如,一个1.155 == 1.5或1.6 ..我不太相控)。
所以..我应该存储的平均结果作为浮动,小数或双倍?
当我检查什么LINQ返回,它可以返回三个值!
最后,这将是相关的SQL数据类型字段,也。
喝彩!
解决方案
您需要的是十进制数据类型:
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将导致算术溢出。
其他提示
十进制主要用于货币。虽然它的工作,人们可能会觉得混乱。在这种情况下,我认为浮动将是一个更好的选择。
十进制 - 这是最简单的,但是任何mentined的会做的工作。
如果你想储存使用尽可能少的空间尽可能的结果,你大概可以做这样的事情(伪):
integer = ( sum(all_values) / all_values.count().float ) * 100;
这会给你值352,其平均值为3.52,所以你可以将它存储为一个整数(字节就足够我猜大),只是由100时要显示它划分它。
在另一方面,如果你不关心平均值的存储,使用浮动值是可能更快。 (同时测试,看看什么是真正的最快您的系统上。)
不隶属于 StackOverflow