SQL Server';圆形';vs C#&x27;数学圆';

SQL Server';圆形';vs C#&x27;数学圆';,c#,sql,sql-server,C#,Sql,Sql Server,我有下面的sqlserver语句,我想把它转换成c。我知道在C中有一种叫做Math.Round的东西。我已经尝试过了,但是C#返回相同的结果C#返回一个int。有关详细信息,请查看以下测试和结果: SQL SERVER Select ROUND(SUM(someValue) / 60,0) C# 测试和结果 select ROUND(150.75, 0) -- Result = 151.00 var alpha = Math.Round(150.75, 0); // Result = 1

我有下面的
sqlserver
语句,我想把它转换成
c
。我知道在
C
中有一种叫做
Math.Round
的东西。我已经尝试过了,但是
C#
返回相同的结果C#返回一个int。有关详细信息,请查看以下测试和结果:

SQL SERVER

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

测试和结果

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

var alpha = Math.Round(150.75, 0);
// Result = 151
谁能告诉我为什么不把0.00放在最后。在实际值中会有任何差异。我正在寻找用C#替换SQL的方法

谢谢

根据Sql Server的
ROUND()
将为十进制输入返回十进制输出

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

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

(推测性,但
string.Format
Debug.Writeline
上的默认格式可能在内部使用一种技术来检索小数位数并提供默认显示),例如


SQL为您提供的数据类型与您输入的数据类型相同—SQL中的十进制数据类型有一个精度设置,并且由于您使用2dp指定数字,因此SQL返回一个2dp值


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

eve在SQL中,我要求小数点后0位。您一定是在执行ToString()?我一直认为151与151是相同的数字。00@Remus鲁萨努请仔细阅读我的问题。我在问它是否与实时值不同。请记住,您看到的不是数字,而是数字的字符串表示形式。SSM或您正在使用的任何东西必须自动显示带两位小数的十进制数字,而VS则不显示。它不会改变值,只是表示。谢谢,它会与实时值产生差异。因为我计划用C#替换用SQL编写的逻辑?这取决于您需要什么样的精度-您使用的是精确值还是允许在高DP数时出现一些错误?有关更多信息,请参阅本文,可能会澄清您需要的数据类型(我认为是十进制)
select ROUND(150.75, 0)
-- Result = 151.00

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