TSQL Round()不一致?

Dr *_*bie 6 t-sql rounding

我们遇到的问题减少到以下两个陈述:

select convert(float, (convert(float,5741.61)/convert(float, 196.00)) * convert(float,14.00)) as unrounded, round(convert(float, (convert(float,5741.61)/convert(float, 196.00)) * convert(float,14.00)), 2)  as roundedTo2dp

select convert(float, 410.115) as unrounded, ROUND( convert(float, 410.115), 2) as roundedTo2dp
Run Code Online (Sandbox Code Playgroud)

第一个语句使用浮点数来计算值410.115,以及使用round()到2个小数位的结果.舍入值出现在410.11.

第二个语句使用浮点值410.115并将其舍入到2个小数位.圆形结果为410.12.

当价值四舍五入时,为什么一个四舍五入,另一个四舍五入呢?

如何才能将第一个声明转到410.12?

编辑:格式化道歉 - stackoverflow没有在这台机器上显示任何格式(非常奇怪).

Bri*_*haw 5

小数精度比浮点数更好.如果你改变了浮点数就像DECIMAL(18,2),你会得到你所期望的,你不需要再调用圆函数了.

select convert(decimal(18,2), (convert(decimal(18,2),5741.61)/convert(decimal(18,2), 196.00)) * convert(decimal(18,2),14.00)) as unrounded, round(convert(decimal(18,2), (convert(decimal(18,2),5741.61)/convert(decimal(18,2), 196.00)) * convert(decimal(18,2),14.00)), 2)  as roundedTo2dp
Run Code Online (Sandbox Code Playgroud)

结果是

unrounded   roundedTo2dp
410.12      410.12
Run Code Online (Sandbox Code Playgroud)

链接到MSDN关于小数.http://msdn.microsoft.com/en-us/library/ms187746.aspx

希望有帮助......