gpt4 book ai didi

SQL Server float 总和应为 1,但过滤器另有说明

转载 作者:行者123 更新时间:2023-12-04 22:34:44 25 4
gpt4 key购买 nike

我有一个字段的数据类型设置为 float 的表。给定记录集的值的总和应为 1,选择中的字段确实返回 1,但是,HAVING 子句另有说明。

这是我在表中的确切值,正如您所看到的,此示例执行相同的操作。为什么这总和超过 1 ?我搞不清楚了!

with example as (
SELECT 'Code' as Code, cast(0.462 as float) as perc
UNION ALL
SELECT 'Code' as Code, cast(0.116 as float) as perc
UNION ALL
SELECT 'Code' as Code, cast(0.181 as float) as perc
UNION ALL
SELECT 'Code' as Code, cast(0.053 as float) as perc
UNION ALL
SELECT 'Code' as Code, cast(0.188 as float) as perc
)

SELECT
Code,
SUM(perc)
FROM
example
GROUP BY Code
HAVING SUM(perc) > 1

最佳答案

我想你误解了花车。不幸的是,我并不是说以一种光顾的方式,大多数人都误解了花车。

浮点数能够“重新缩放”自己。能够以相同的数据类型保存巨大的数字或微小的数字。这并不意味着它们“无限精确”。这只是意味着他们有一个可以覆盖的极端范围。然而,他们确实为这种灵活性付出了代价。由于它们是十进制数的二进制近似值,因此存在舍入误差。

如果你想了解更多,网上有很多。一开始它会弄乱人们的头脑,但是一旦您了解它,您就会变得更好、更安全、更明智。

因此,对于您的情况,如果您想保留确切的值,请不要使用浮点数据类型。请改用定点数据类型。

如果您将 FLOAT 更改为 DECIMAL(9,4) 之类的内容,则不会出现与浮点数相关的舍入错误。

但是,您将无法在其中存储 0.12345,您需要为此指定 DECIMAL(9,5)。但是您将始终保证可以存储在其中的任何数字都将被准确存储,而不是近似存储。

关于SQL Server float 总和应为 1,但过滤器另有说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777380/

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