SELECT
ROUND(152.7300, 2, 1), --returns 152.7300
ROUND('152.7300', 2, 1) --returns 152.72
为什么第二个舍入表达式导致向下舍入到.72?
我想象它与将
VARCHAR
输入转换为numeric
有关,但是我无法想象这将如何导致它丢失decimal
值。 最佳答案
当您将字符串文字传递给ROUND
时,SQL Server会将其转换为float
*。相反,152.7300
is treated as numeric
:
在Transact-SQL语句中,使用必需的最小精度和小数位数,带有小数点的常量会自动转换为数字数据值。float
的精确152.73
表示形式是152.72999572753906
,因此截断**至第二个十进制数字将产生152.72
。
*您可以通过传递非数字字符串(例如, ROUND('foo', 2, 1)
。这将产生“将数据类型varchar
转换为float
时出错”。
**为ROUND
的第三个参数传递非零值表示数字被截断,而不是四舍五入。
关于sql - 这两个舍入表达式的值不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44076787/