考虑下面的 T-SQL 代码。我想将 10 个单位分配给 a、b、c,并根据 a、b、c 的当前值按比例分配。
对于这种情况,
select @a + @b + @c
计算后正如预期的那样正好是 10。
但是,在我的客户端应用程序中,这些值是从存储过程返回的
4.72222222222222, 4.72222222222222, 0.555555555555556
加起来就是 9.999999999999996
粗略地说,问题似乎是 4.72222222222222 值的末尾都缺少 2,如果我手动添加它们,结果 = 10 符合预期。
相反,如果 0.555555555555556 减去 5,例如 0.55555555555556,则总和结果 = 10。
谁能建议如何优雅地处理这件事?每个结果的精度并不那么重要,但重要的是它们总是总和回到原来的@adjustby
.
declare @totalOwned float
declare @adjustby float
declare @a float
declare @b float
declare @c float
set @adjustby = 10
set @a = 85
set @b = 85
set @c = 10
set @totalOwned = @a + @b + @c
select @a = @adjustby * (@a/@totalOwned)
select @b = @adjustby * (@b/@totalOwned)
select @c = @adjustby * (@c/@totalOwned)
select @a + @b + @c,@a,@b,@c