这里有两个问题。
第一个是舍入。这可以方便地与Round
功能SQL来完成:
SELECT Round(8660.125, 2);
-- returns 8660.130
第二,正如你所看到的,就是小数点后3位,这仍然返回。这是由于数据类型。你有你的四舍五入值,但它仍然显示一个额外的数字。
可以解决这个问题是这样的:
SELECT Convert(decimal(16, 2), 8660.125);
--returns 8660.13 by implicitly rounding--you could round first but not needed
然而,这两个值以上是相同数字。在我看来,你不应该在SQL Server端处理演示。如果您想要两位小数,请将您的SSRS报告中的单元格格式设置为#.00
。这将确保您获得所需的(舍入)小数位数,无论如何!没有必要的功能。只是一个简单的属性。
这与日期的原理相同。日期的基础值仅为,数字为。但有很多方法可以向用户提供日期 - 具有长名称或不同的部件顺序或使用不同的分隔符。每当你改变日期格式时,你会一直回到你的SQL并改变你的Convert()
风格?
您不希望SQL Server在报告中确定这些数字的字体,颜色,大小,填充,样式,位置或可见性。这些都必须在设计时手动设置。那为什么会显示这个值(当这些值完全相等时)会有什么不同?在我看来,将其推入SQL查询将把关注的领域转移到错误的地方。这就增加了不需要在那里的查询的复杂性(而不是“智能”)!我没有看到将单元格的数字格式设置为“添加智能”。
这是一个介绍性问题,因此请将它保存在适当的位置,以便解决所有其他演示文稿元素 - SSRS报告。
更新
我能想到的一个场景,你会想在您的查询进行转换,那就是当值将在更多的计算可以进一步使用和有关业务规则所述计算需要它。例如,如果你计算银行利息,他们可能会有规则,比如“在第一轮结束后保留4位小数,然后在第三步后最后到达小数点后两位(美元和美分)。”但这是一个不同的故事:现在的值很重要,不仅仅是它的显示。
如果您发布了一个示例查询或您的查询的摘录,它可能会有所帮助。 –
@Aaron ...会做 – MikeTWebb
通常在报告中,四舍五入是在显示屏上完成的,而不是改变底层数据。如果您不需要,请不要执行数据转换。 – DOK