Nic*_*o M 2 sql sql-server rounding
SELECT
ROUND(152.7300, 2, 1), --returns 152.7300
ROUND('152.7300', 2, 1) --returns 152.72
Run Code Online (Sandbox Code Playgroud)
为什么第二个舍入表达式导致向下舍入到.72?
我想它与VARCHAR转换为a 的输入有关numeric,但我无法想象它会如何导致它失去这样的decimal值.
传递字符串文字时ROUND,SQL Server将其转换为float*.相反,152.7300被视为numeric:
在Transact-SQL语句中,具有小数点的常量将使用所需的最小精度和小数位自动转换为数字数据值.
确切float表示152.73为152.72999572753906,因此截断**到第二个十进制数152.72.
*您可以通过传递非数字字符串来检查,例如ROUND('foo', 2, 1).这将产生"将数据类型转换varchar为"的错误float.
**为第三个参数传递非零值ROUND表示截断数字,而不是舍入.
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |