作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在某些时候,我有一个数字(28,10)并且我将它投入金钱(我知道它是坏的,但由于遗留原因我必须退钱)同时我还必须设置符号(乘以+1/-1).
在第一次尝试中,我将 +/-1 转换为匹配数字类型。
对于值 133.3481497944,我们遇到了一个奇怪的行为(我已经简化了实际代码,以便仅保留演示问题所需的元素):
SELECT CAST(CAST(133.3481497944 AS numeric(28,10))*cast(1 AS numeric(28,10)) AS money)
133.3482
SELECT CAST(CAST(133.3481497944 AS numeric(28,10)) * 1 AS money)
133.3481
最佳答案
在乘以数字时,SQL 使用以下规则来确定输出的精度和小数位数:
p = p1 + p2 + 1
s = s1 + s2
In SQL Server 2005 RTM (and previous versions), we decided preserve a minimum scale of 6 in both multiplication and division.
SELECT CAST(CAST(133.3481497944 AS numeric(28,10))*cast(1 AS numeric(9,7)) AS money)
133.3481
.
关于sql - 在 SQL Server 2008 中舍入时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20122752/
我是一名优秀的程序员,十分优秀!