【发布时间】:2018-06-22 13:39:36
【问题描述】:
我正在使用mysql中的存储过程将以下值设置为双变量。
DECLARE vVar DOUBLE(16,2) DEFAULT 0;
SET vVar = ROUND(TRUNCATE((29.00 * 1.75/100),2));
在 mySql 编辑器中触发上述表达式会得到 1(这是正确的,因为 ROUND(0.50) 会得到 1)。但是,存储在 vVar 中的值是 0。
另一方面,如果我写
SET vVar = ROUND(TRUNCATE((29.00 * 1.75/100),4));
然后存储在 vVar 中的值变为 1。(这也是正确的,因为 ROUND(0.5075) 为 1)。
谁能解释一下这里发生的奇怪行为。
我对 vVar 的数据类型有疑问,所以我尝试将其从 DOUBLE(16,2) 更改为 DECIMAL(16,2)。但这并没有什么不同。
有没有办法从第一个表达式中得到 1 ?
SET vVar = ROUND(TRUNCATE((29.00 * 1.75/100),2));
任何帮助将不胜感激。
【问题讨论】:
-
However, the value that gets stored in vVar is 0...您如何确定存储在vVar中的值? -
@Tim Biegeleisen:我正在使用这个值来更新表中的列
-
我建议您提供一个可重现的问题演示。
标签: mysql stored-procedures rounding truncate sqldatatypes