gpt4 book ai didi

sql - 如何在 SQL Server 2008 R2 中获得精确结果(不是四舍五入的结果)?

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

在问这个问题之前,我一直在谷歌和这个 stackoverflow 上搜索,但我没有找到任何可以解决我的问题的结果。现在我用完了关键字来搜索更多。我希望这里有人可以帮助我。

这是我的问题:我正在处理大量数据并使用 SQL Server 2008 R2 作为数据库。我在数据值上遇到了一些错误,原因是这个类似的查询:

SELECT (SELECT 93834718293817283242347.982763509735278) * (SELECT 100/100)

结果是 93834718293817283242347.982764 并导致我的计算值不正确。我希望结果是 93834718293817283242347.982763509735278 我该怎么做?

我试过这样的另一种方式,仍然不符合我的期望

SELECT CONVERT(DECIMAL(38,15), 93834718293817283242347.982763509735278) * CONVERT(DECIMAL(38,15), (100/100))

输出是 93834718293817283242347.982764 但我想要 93834718293817283242347.982763509735278

如果你不介意的话,我需要一些解释。谢谢

最佳答案

其实我不知道如何解决这个问题,但我给你一些解释。好吧,让我们看看值的属性:

DECLARE @number SQL_VARIANT
SELECT @number =93834718293817283242347.982763509735278
SELECT @number
SELECT
SQL_VARIANT_PROPERTY(@number, 'BaseType') BaseType,
SQL_VARIANT_PROPERTY(@number, 'MaxLength') MaxLength,
SQL_VARIANT_PROPERTY(@number, 'Scale') Scale,
SQL_VARIANT_PROPERTY(@number, 'Precision') Precision

第二个:

DECLARE @number SQL_VARIANT
SELECT @number =100.0/100.0
SELECT @number
SELECT
SQL_VARIANT_PROPERTY(@number, 'BaseType') BaseType,
SQL_VARIANT_PROPERTY(@number, 'MaxLength') MaxLength,
SQL_VARIANT_PROPERTY(@number, 'Scale') Scale,
SQL_VARIANT_PROPERTY(@number, 'Precision') Precision

和乘法

DECLARE @number SQL_VARIANT
SELECT @number =CONVERT(DECIMAL(38,15), 93834718293817283242347.982763509735278) * (100/100)
SELECT @number
SELECT
SQL_VARIANT_PROPERTY(@number, 'BaseType') BaseType,
SQL_VARIANT_PROPERTY(@number, 'MaxLength') MaxLength,
SQL_VARIANT_PROPERTY(@number, 'Scale') Scale,
SQL_VARIANT_PROPERTY(@number, 'Precision') Precision

仔细看结果:

BaseType             MaxLength            Scale                Precision
-------------------- -------------------- -------------------- -------------
decimal 17 6 38

如你所知,你不能在CONVERT(DECIMAL(38,15), 93834718293817283242347.982763509735278)中声明16,否则你会得到算术溢出将数字转换为数字数据类型时出错。
因此,结合公式 here SQL Server 不能添加两个比例值,因为它使用默认比例 6。看下面的例子,它给出了 5 的比例:

SELECT CONVERT(DECIMAL(38,4), 93834718293817283242347.982763509735278) * CONVERT(DECIMAL(38,1), (100/100))

关于sql - 如何在 SQL Server 2008 R2 中获得精确结果(不是四舍五入的结果)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30135187/

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