SQL Server' ROUND' vs C#' Math.Round'

时间:2014-04-11 10:37:21

标签: c# sql sql-server

我有以下SQL Server语句,我想将其转换为c#。我知道Math.Round中有一些名为C#的内容。我试过但C#返回相同的结果c#返回一个int。有关详细信息,请查看测试&结果如下:

SQL SERVER

Select ROUND(SUM(someValue) / 60,0)  

C#

var alpha = Math.Round(someValue / 60, 0);

测试&结果

select ROUND(150.75, 0)
-- Result = 151.00

var alpha = Math.Round(150.75, 0);
// Result = 151

任何人都可以建议我为什么不把.00放在最后。在实际价值中会有任何不同。我正在寻找用C#替换SQL。

由于

2 个答案:

答案 0 :(得分:4)

根据table on MSDN here Sql Server的ROUND()将返回小数输入的十进制输出。

Math.Round的重载返回十进制或双精度,具体取决于输入类型。

因此,您没有看到.00的原因必须是您应用于结果的格式。

(推测,但string.FormatDebug.Writeline上的默认格式可能在内部使用技术such as this来检索小数位数并提供默认演示文稿),例如

int count = BitConverter.GetBytes(decimal.GetBits(Math.Round(150.75M, 0))[3])[2];

答案 1 :(得分:1)

SQL为您提供了相同的数据类型 - 在SQL中有十进制数据类型的精度设置,因为您指定的数字为2dp,SQL返回的值为2dp。

.NET不与SQL共享相同的数据类型,因此返回double(因为您没有将输入指定为十进制)