【发布时间】:2022-01-15 05:22:06
【问题描述】:
在分割存储在变量中的浮点数与仅使用值时,我在 SQL Server 中遇到了这个奇怪的问题。
案例如下:
DECLARE @FLOAT FLOAT = 6.80
print ROUND(@FLOAT / 2, 2, 0);
print ROUND(@FLOAT / 2, 2, 1);
打印出来:
3.4
3.39
截断值的第二个 ROUND 给出了错误的值。它应该是 3.4 而不是 3.39。
但是当我使用没有变量的值时,它可以正常工作:
print ROUND(6.80 / 2, 2, 0);
print ROUND(6.80 / 2, 2, 1);
打印出来:
3.400000
3.400000
谁能帮我理解这个问题? 提前致谢。
【问题讨论】:
-
一点也不奇怪,您使用
float作为第一个表达式,使用decimal作为第二个表达式,您应该期待这样的行为。以 2 为基数和以 10 为基数的数字行为完全不同。 -
感谢您的快速评论。很抱歉,但我认为我不明白您所说的与浮点数相关的“以 2 为基数和以 10 为基数的数字行为完全不同”是什么意思。
-
Base 2 或二进制数与 Base 10 或十进制数。非整数值通常无法与前者准确存储。例如,阅读here。
标签: sql sql-server floating-point rounding