gpt4 book ai didi

SQL Server 计算给出了意外的结果

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

我有一个非常奇怪的场景,我相信这是一个解释。

我试图计算一些东西,这里是值:

 SELECT 145.28/63 *(8 * 100) / 100 -- returns: 18.4482480000

问题在于这是不正确的,如果我使用 Windows Calculator 进行计算,那么它会返回一个更精确的值:

145,28/63 *(8 - 0 * 100)/100 = 18,44825396825397

我必须进行大量更改才能使其与 SQL Server 一起使用:

SELECT 145.28  * 100 * 8 / (100 * 63) --RETURNS: 18.4482539682539

为什么我需要在 SQL Server 中更改数字而不是在 Windows 中?

在 Navision 编程中,它返回正确的值,即 18.4482539682539682

最佳答案

自动分配的默认数据类型根本不具备您想要的精度。这可以通过将您的第一个数字显式转换为更精确的数据类型来轻松解决,如下所示:

SELECT CAST(145.28 AS decimal(38,35))/63 *(8 * 100) / 100 
--returns 18.448253968253968253968253

从那里开始,sql server 明白不要向下转换它,所以结果变成 18.448253968253968253968253

十进制的语法是十进制(总位置,逗号后)。不要忘记逗号也有一个位置。

这里是 link用于文档。

如果你想限制小数,你可以像这样使用 ROUND:

SELECT ROUND(CAST(145.28 AS float)/63 *(8 * 100) / 100,12)

您在 sql server 中可以达到的最大精度(无论如何作为单个值)是18.448253968253968253968253

来自 ms 的每个链接文档:

十进制[(p[,s])]和数字[(p[,s])]
固定精度和比例数字。当使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。十进制的 ISO 同义词是 dec 和 dec(p, s)。 numeric 在功能上等同于 decimal。

关于SQL Server 计算给出了意外的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25053101/

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