我有一个十进制或字符串的值。样品
0.41
0.91
"0 / 2"
0.75
我目前的表情是 = IIF(IsNumeric(Fields!currentRate.Value),Format(CDBL(Fields!currentRate.Value)," P2"),Fields!currentRate.Value)
这会正确返回格式化为百分比的小数,但字符串仅显示#Error。我已尝试在IIF语句中使用各种逻辑并使用Switch代替。但是小数总是正确显示为百分比,而字符串仅显示#Error。
是否可以在同一列中同时显示数值和字符串值,同时保持数值的格式化?
答案 0 :(得分:3)
该错误与CDbl
函数在尝试将字符串的列转换为数字时抛出异常有关。是的,我知道您正在检查它是否是数字,但IIF
不是语言结构,它是函数,作为一个函数,它在传递它们之前评估它的所有参数到功能。这意味着即使将丢弃一个True和False参数,它们也会被计算,当它在字符串上计算CDbl
时会抛出错误。
尝试使用Val
功能。它的好处是,当它传递非数字数据时不会抛出错误 - 它只是尽力将它转换为数字。
=IIF(IsNumeric(Fields!currentRate.Value), Format(Val(Fields!currentRate.Value), "P2"), Fields!currentRate.Value)
答案 1 :(得分:1)
IIF()
是SQL Server中的一个函数。因此,它返回一个值,其类型由其参数指定。正如documentation:
返回类型中具有最高优先级的数据类型 true_value和false_value。有关更多信息,请参阅数据类型 优先级(Transact-SQL)。
如果两个值中的一个是数字,则优先。假设两者都是数字。换句话说,SQL中的表达式只返回所有行的一种类型。
答案 2 :(得分:0)
对于偶然发现这个问题的其他人。将我的格式从使用CDBL更改为VAL可以使其正常工作。