gpt4 book ai didi

sql-server - SQL Server比较两个小数位不正确

转载 作者:行者123 更新时间:2023-12-05 01:01:56 25 4
gpt4 key购买 nike

我正在使用SQL Server 2008 R2。为什么此比较返回true?值是1.98和2.2,这是非常不同的:

declare @num1 decimal = 1.98;
declare @num2 decimal = 2.2;

if(@num1 != @num2)
select 0;
else if(@num1 = @num2)
select 1;

最佳答案

您尚未指定默认精度和小数位。默认精度为18,小数位数为0-表示小数点后没有数字。请参见documentation

因此,这等效于:

declare @num1 decimal(18, 0) = 1.98;
declare @num2 decimal(18, 0) = 2.2;


然后,SQL Server通过将常量转换为适当的值来分配值,并且两者都设置为“ 2”。

如果要精确存储这些值,则需要显式设置精度/小数位。

将值四舍五入的事实是因为两个都是小数。这不是一般规则。它取决于类型,如 here所述。


当您转换小数位不同的数据类型时,有时结果值将被截断,而在其他时候则将其舍入。下表中描述了确切的规则。

关于sql-server - SQL Server比较两个小数位不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36546769/

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