gpt4 book ai didi

sql - sql中的轮函数

转载 作者:行者123 更新时间:2023-12-04 16:08:19 26 4
gpt4 key购买 nike

float 数据类型的舍入函数

DECLARE @Amt Float
DECLARE @Tax Float
DECLARE @Qty TINYINT
SET @Amt=70.96
SET @Tax=5.26
SET @Qty=1
SELECT ROUND((@Amt-@Tax)/@Qty, 2,1)

它给我的输出是 65.69但我想要 65.70

不知道为什么它不适用于 float 据类型。如果我的数据类型是十进制,那么它可以工作,但在我的数据库中它是 float ,我不想四舍五入。

如果我使用 Convert to decimal 就可以了

SELECT ROUND((CONVERT(DECIMAL(10,2),@Amt)-CONVERT(DECIMAL(10,2),@Tax))/@Qty, 2,1)

它给我的输出为 65.700000。

还有其他解决方案吗?请帮助..

最佳答案

答案是如果可以避免,不要使用 FLOAT,尤其是(!)对于货币金额。

70.96 - 5.26 = 65.7 对我们来说是精确的,但它不能精确存储在 FLOAT 中,因为 70/100 没有精确的二进制表示,并且你总会得到四舍五入的伪影。

解决方案:改用DECIMAL


像这样:

DECLARE @Amt DECIMAL(10,2)
DECLARE @Tax DECIMAL(10,2)
DECLARE @Qty TINYINT
SET @Amt=70.96
SET @Tax=5.26
SET @Qty=1
SELECT (@Amt-@Tax)/@Qty

是的,我确实省略了 ROUND-call,因为...

  • 不会改变结果;
  • 如果目的是获得带有一定小数位数的输出,则不应在 SQL 后端完成,而应在 App/Web 前端完成,因为这是一个演示问题,这通常意味着采用语言环境/区域/用户-设置考虑在内。

关于sql - sql中的轮函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260021/

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