Sql 将科学记数法浮点值转换为十进制变量(4gl,informix)

Sql 将科学记数法浮点值转换为十进制变量(4gl,informix),sql,informix,4gl,Sql,Informix,4gl,我们有一个sql表,它有一个浮点数列,以科学记数法存储值。我有一个值-1.23E-256。当我运行查询并将查询结果分配给变量时,我将这个浮点值分配给十进制(15,2)。但是由于这种科学的表示法,值不会被分配到4gl程序中的变量中,并抛出错误。 我尝试使用convert和cast函数将select查询中的科学表示法更改为十进制,但是抛出了一个错误“值非常小,无法存储为十进制”。我想把数据库中的浮点变量转换成十进制格式的4gl程序中的变量。我怎样才能做到这一点呢?十进制[(p[,s])]和数字[(p

我们有一个sql表,它有一个浮点数列,以科学记数法存储值。我有一个值-1.23E-256。当我运行查询并将查询结果分配给变量时,我将这个浮点值分配给十进制(15,2)。但是由于这种科学的表示法,值不会被分配到4gl程序中的变量中,并抛出错误。 我尝试使用convert和cast函数将select查询中的科学表示法更改为十进制,但是抛出了一个错误“值非常小,无法存储为十进制”。我想把数据库中的浮点变量转换成十进制格式的4gl程序中的变量。我怎样才能做到这一点呢?

十进制[(p[,s])]和数字[(p[,s])] 固定精度和刻度数字。使用最大精度时,有效值介于-10^38+1到10^38-1之间

浮动 -1.79E+308至-2.23E-308、0和2.23E-308至1.79E+308

所以这是不可能的,因为这个数字太小了,所以你应该把它保留在浮点型和数字型两种形式 固定精度和刻度数字。使用最大精度时,有效值介于-10^38+1到10^38-1之间

浮动 -1.79E+308至-2.23E-308、0和2.23E-308至1.79E+308


所以这是不可能的,因为这个数字太小了,所以你应该把它放在float中,不完全是这样。您必须先将其转换为浮点,然后再转换为十进制或其他形式:

select convert(decimal(15,2), convert(float, '-1.23E-256')) 
转换为:
0.00


因此,您当然会丢失该值,但至少不会产生错误。

不完全如此。您必须先将其转换为浮点,然后再转换为十进制或其他形式:

select convert(decimal(15,2), convert(float, '-1.23E-256')) 
转换为:
0.00

因此,您当然会丢失该值,但至少不会产生错误。

根据该值

-1.23E-256=-1.23×10^-256

这意味着您必须将小数点移动256次。你正试图将这个微小的数字融入到2的感知中。从1到253的小数位都是0

因此,@user2615302是正确的,您应该根据该值将其保持为浮点值

-1.23E-256=-1.23×10^-256

这意味着您必须将小数点移动256次。你正试图将这个微小的数字融入到2的感知中。从1到253的小数位都是0


因此,@user2615302是正确的,您应该将其保留为浮点值

float是一种数字数据类型。科学记数法是一种显示格式。发生在你身上的任何事情都不是由科学符号引起的。您的错误消息为您提供了有价值的信息。4gl是否有格式化数字的函数?十进制(15,2)将显示0.00float是数字数据类型。科学记数法是一种显示格式。发生在你身上的任何事情都不是由科学符号引起的。您的错误消息为您提供了有价值的信息。4gl是否有格式化数字的功能?十进制(15,2)将显示0.00