【问题标题】:Numeric(precision,decimal) equivalent in ssrsssrs 中的数值(精度,小数)等价物
【发布时间】:2021-05-14 05:00:22
【问题描述】:

我有一条sql语句:

Declare @res numeric(30,10)
Declare @num1 numeric(30,10) = 233.6108200000
Declare @num2 numeric(30,10) = 200000.0000000000
Declare @num3 numeric(30,10) = 0.8341
set @res = ((@num1/@num2) * 10000 * @num3)
select @res

o/p : 9.7427050000

但如果我尝试转换,则在 ssrs 表达式中:

=CDec((233.6108200000/200000.0000000000) * 10000 * 0.8341)

o/p : 9.74273925

编辑 我需要对 ssrs 表达式/文本框属性进行哪些更改以匹配 sql server 结果?

【问题讨论】:

  • SSRS 没有比例和精度。如果您需要使用明确的比例和精度,则需要使用 SSRS 表达式以外的其他内容。
  • 或者文本框属性有什么变化?
  • 更改显示的格式不会增加丢失的比例。使用#,0.00000 格式化的1.235 将是1.23500 它不会“返回”已经丢失的数字。
  • 简单的答案就在那里,浮点数学正在发生。我怀疑在第二个。浮点数学将数字存储为近似值而不是准确值。我会尝试将第二个版本中的数字转换为数字类型,就像你在第一个版本中所做的一样,看看是否可以解决它。如果没有,请继续查找,直到找到浮动发生的位置并在两个查询中消除它们。
  • @Larnu : 好的,那么解决办法是什么?

标签: sql sql-server reporting-services ssrs-2008 ssrs-2012


【解决方案1】:

我无法对此进行测试。但我怀疑在这个表达式中

=CDec((233.6108200000/200000.0000000000) * 10000 * 0.8341)

部分或全部数字被解释为浮点数,从而产生浮点运算。我怀疑您需要更多类似此表达式的内容来强制执行十进制(数字)算术。

= (CDec(233.6108200000)/CDec(200000.0000000000)) * CDec(10000) * CDec(0.8341)

【讨论】:

    猜你喜欢
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多