【问题标题】:When creating expression in SSRS 2016 Round() function third param errors out在 SSRS 2016 Round() 函数中创建表达式时,第三个参数错误
【发布时间】:2019-01-03 15:56:51
【问题描述】:

使用 Round() 函数时我做错了什么?最后我试图返回一个数字来显示美元数字(不是数据类型,只是 $####.## 的格式作为示例)。

当我按照以下方式使用 Round() 函数时,它可以正常工作并四舍五入...

=Round(125.239, 2)

输出为 125.24

我在表达式中使用的 Round() 函数如下...

=Round(125.239, 2, 1)

由于某种原因引发错误。

参数匹配参数“模式”从“整数”缩小到 'System.MidpointRounding'

我做错了什么?为了补充我的问题,我应该说我正在尝试使用“1”作为第三个参数来ROUND DOWN输出得到“125.23”作为最终结果。

【问题讨论】:

  • 这适用于我的配置。你的数据库是什么版本的?请。
  • @pascalsanchez 错误是 VB.Net 错误,而不是 SQL Server。 OP 不是在 SQL 中执行此操作,而是在 SSRS 表达式中执行此操作。与数据库的版本无关。

标签: sql-server reporting-services ssrs-2016


【解决方案1】:

SSRS 使用 VB.Net 函数,因此请尝试:

=Round(125.239, 2, MidpointRounding.AwayFromZero)

参考:MidpointRounding Enum

编辑:

根据 OP 的评论,实际后面的是正确到小数点后 2 位的值,而不是四舍五入。这可以通过执行以下操作来实现:

=Floor(125.239*100) / 100

【讨论】:

  • 我很困惑...ToEvenAwayFromZero 的结果都是“125.24”。不能得到“125.23”作为结果吗?
  • 不适用于 ROUND,没有 Arvo。我将更新我的答案,向您展示如何获得您想要的结果。
  • 为你更新了答案,@ArvoBowen。你真正想要的是Floor
  • 感谢您的快速回复和非常有帮助的回答!
  • 我猜这实际上是两个问题合二为一。我需要找出您所涵盖的 Round 函数(第三个参数)对我不起作用的原因,以及我正在寻找一个完全不同的函数的事实。搞定了!
【解决方案2】:

我们可以看到更多你的代码吗,如果你只是输入它是否有效:

SELECT ROUND(125.239, 2, 1)

四舍五入更像是截断。 ROUND 功能应该适合您,但如果您只是使用:

ROUND(125.239, 2, 1)

它将返回 125.230。如果你希望它的格式正确,我会这样做:

CAST(ROUND(125.239, 2, 1) AS DECIMAL(18,2))

这将返回 125.23。这会将数字截断到小数点后 2 位,后面跟着一个零,然后以您想要的方式格式化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    相关资源
    最近更新 更多