【问题标题】:How to preserve decimal precision in stored procedure?如何在存储过程中保留小数精度?
【发布时间】:2015-04-24 23:32:40
【问题描述】:

我在表中有一个数据类型为 decimal(10,2) 的列,当我尝试更新存储过程中的列时,我失去了 2 位精度。

如果我将字段更新为单个查询,它可以正常工作,但在存储过程中它会失去精度。

例子:

UPDATE table
SET decimal(10,2) column = decimal(10, 2) column / 100

示例:197.50 当更新结果为197.00

谢谢

【问题讨论】:

  • 你真的是在除以 100 吗?
  • 您使用的是哪个 rdbms?
  • 尝试 /100.0 强制进行浮点计算。
  • 这适用于哪个 RDBMS?请添加一个标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或者完全是其他东西。
  • 让我们看看表定义和实际的 UPDATE 语句。您列出的内容给出了至少一种 SQL 的语法错误。

标签: sql stored-procedures decimal precision


【解决方案1】:

我认为,在您的 RDMBS 中,运行时转换会自动在 column / 100 上完成:

  • column 是十进制格式,并且
  • 100 不是十进制格式

因此,您的解决方案是将 100 更改为十进制格式,如下所示:

  • 100.00
  • CAST(100 As Decimal(10, 2))
  • (decimal(10, 2) 100)

【讨论】:

    【解决方案2】:

    问题已解决。由于某种原因 /100 在我尝试 * 0.01 时无法保持精度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2012-08-06
      • 2018-01-20
      相关资源
      最近更新 更多