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/

10-10 12:45