gpt4 book ai didi

sql - 这两个舍入表达式的值不同吗?

转载 作者:行者123 更新时间:2023-12-02 13:26:55 25 4
gpt4 key购买 nike

SELECT
ROUND(152.7300, 2, 1), --returns 152.7300
ROUND('152.7300', 2, 1) --returns 152.72

为什么第二个舍入表达式会导致向下舍入到 0.72 ?

我想这与 VARCHAR 输入被转换为 numeric 有关,但我无法想象这会如何导致它丢失 >十进制值这样。

最佳答案

当您将字符串文字传递给ROUND时,SQL Server会将其转换为float*。相比之下,152.7300 is treated as numeric :

In Transact-SQL statements, a constant with a decimal point is automatically converted into a numeric data value, using the minimum precision and scale necessary.

152.73 的精确 float 表示为 152.72999572753906,因此截断** 到第二个十进制数字会产生 152.72

* 您可以通过传递非数字字符串来检查这一点,例如ROUND('foo', 2, 1)。这将产生“将数据类型 varchar 转换为 float 时出错。”

**ROUND 的第三个参数传递非零值表示截断数字,而不是四舍五入。

关于sql - 这两个舍入表达式的值不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com