我们遇到的问题减少到以下两个陈述:
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没有在这台机器上显示任何格式(非常奇怪).
小数精度比浮点数更好.如果你改变了浮点数就像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
希望有帮助......
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |