gpt4 book ai didi

sql - 为什么 Sybase ASE 在除法和减法中抛出截断错误?

转载 作者:行者123 更新时间:2023-12-04 00:07:40 26 4
gpt4 key购买 nike

我正在使用 Sybase ASE 15。在以下 SQL 中,存在截断错误,但前提是两个数字的除法后跟一个减法。

    declare @P1  decimal (30,16)
declare @P2 decimal (30,16)
select @P1 = 0.0000504412630951 --sixteen decimal places
select @P2 = 0.0000512178647912
select 'This succeeds:'
select @P1, @P2, (@P1 / @P2) --this succeeds: displays the values
select 'This fails:'
select @P1, @P2, (@P1 / @P2) - 1.0 --this fails with a truncation error. Why?
select 'Why does this succeed?'
select @P1, @P2, round( (@P1 / @P2), 46 ) - 1.0 --this succeeds with 46 or less, fails with 47 or greater - but why?

提前致谢。

鲍勃

最佳答案

1.0 不是像 @P1@P2 那样的十进制数据类型,它是作为 float 创建的,因为您没有指定精度和小数位数(或将其转换为数字/十进制数据类型)。第一次尝试成功,因为没有隐式转换,您用相同的精度/小数位数除以两个小数。第二次尝试失败,因为减去 1.0 是将浮点值 1.0 减去小数,这会强制隐式转换回小数。由于它是隐含的而不是显式的,因此您会收到截断错误,因为系统希望您知道通过执行给定的操作您正在失去规模。第三次尝试中的 Round 函数正在进行显式转换,因此任何截断都会被忽略,因为您是在告诉系统您希望从操作中得到什么。

您可以在下面的链接中找到有关比例错误的更多信息,如果您不关心它,甚至可以了解如何将其关闭(查看页面底部)。

SyBooks Online - Conversion Error Handling

关于sql - 为什么 Sybase ASE 在除法和减法中抛出截断错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938613/

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