Sql 避免小值SSR中的舍入错误

Sql 避免小值SSR中的舍入错误,sql,regex,reporting-services,formatting,rounding-error,Sql,Regex,Reporting Services,Formatting,Rounding Error,使用SQL Server Reporting Services,如果数据库中的值为零,则使用以下格式表达式将其正确转换为小数点后2位: ,0.00;,0.00;'--' 但是,如果该值为0.001,且报告需要显示2位小数,即应显示0.00,则结果格式仍显示在报告中 有没有办法避免SSR中的这些舍入问题?如果有,新的格式/功能/etc是什么?0.001的结果应该是0.00。这是一个有趣的结果。我复制了您的结果: 对于最后一列,我在文本框中使用了以下表达式: =Switch(Fields!val.V

使用SQL Server Reporting Services,如果数据库中的值为零,则使用以下格式表达式将其正确转换为小数点后2位:

,0.00;,0.00;'--' 但是,如果该值为0.001,且报告需要显示2位小数,即应显示0.00,则结果格式仍显示在报告中


有没有办法避免SSR中的这些舍入问题?如果有,新的格式/功能/etc是什么?0.001的结果应该是0.00。

这是一个有趣的结果。我复制了您的结果:

对于最后一列,我在文本框中使用了以下表达式:

=Switch(Fields!val.Value = 0.0, "---"
    , Fields!val.Value > 0.0, Format(Fields!val.Value, "#,0.00")
    , Fields!val.Value < 0.0, Format(Fields!val.Value, "(#,0.00);(#,0.00)"))
这将提供您需要的结果

看起来不错,对吧?大概对于在网页上显示或导出为PDF,我认为这很好,如果很烦人的话,但是对于导出为Excel,因为您使用的是格式,所以在报告中显式返回一个字符串,因此在Excel导出中将是一个字符串,而不是像在前三列中那样导出为数字

只有你能说这在你的环境中是否会是一个问题


我认为没有办法绕过SSR,将小数字视为零,因此在文本框中处理它可能是您唯一的选择。

您是否尝试将N2作为格式表达式?它应该可以按您的意愿工作。2不按要求工作,它将负值改为正值,我们要求负值保持为负值,并在数字周围显示括号,而不是-我会处理获得的数据集中的精度,然后匹配SSR中的格式。例如:SQL:选择casthing作为小数5,2,SSRS:Format=0.00;0.00或选择Castthing作为小数5,3,SSRS:Format=0.000;0.000. 这是我的建议,因为我知道,不同系统之间精度的差异有时会使事情变得复杂。@dirtyw0如果它将负值变为正值,那是错误的,我以前从未见过这种行为。@djangojazz问题是我们必须在报告中显示2位小数精度,但数据集包含3位小数。i、 e.数据集=0.001,SSRS解释为0.00。如果报告允许3位小数,你的建议就行了。@Ian Preston,这是正确的一种方法。我们的报告有数百个专栏,我们决定不采用这种方式,而是看看是否有一个与专栏无关的通用解决方案可以解决这个问题。如果必须在每个表达式中包含字段的名称,则更改每个格式将花费数周的时间。有什么想法吗?对不起,@dirtyw0lf,我想我没有任何特别的进一步建议。我将首先承认这不是一个可伸缩的解决方案,但不幸的是,本机格式化行为没有留下很多选项。我唯一可以考虑的是RDL文件中的某种自动化的智能查找和替换,但我想你的报告/数据工作的可能性实际上是零,甚至难以实现。对不起,我不能再帮你了。没关系。谢谢大家在这方面的帮助。