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

时间:2013-11-07 19:57:00

标签: sql informix 4gl

我们有一个带有浮点列的sql表,以科学计数法存储值。我的值为-1.23E-256。当我运行查询并将查询结果分配给变量时,我将此浮点值分配给小数(15,2)。但是由于这种科学记数法,价值观并没有得到4gl程序中的变量和抛出错误。 我试图使用转换和强制转换函数在选择查询中将科学记数法更改为十进制但是抛出并且错误“值非常小以存储到十进制”。我想从数据库中获取这些浮点变量到十进制格式的4gl程序中的变量。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

不完全是。您必须首先转换为浮点数,然后转换为十进制数或其他任何值:

select convert(decimal(15,2), convert(float, '-1.23E-256')) 

转换为:0.00

所以,当然你放弃了这个值,但至少它不会产生错误。

答案 1 :(得分:2)

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

浮 - 1.79E + 308至-2.23E-308,0和2.23E-308至1.79E + 308

所以这是不可能的,因为数字很小,你应该把它留在浮动

答案 2 :(得分:1)

根据Wolfram Alpha

  

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

这意味着您必须将小数位移256次。您试图将该TINY数字拟合为2的精确度。您的小数位1到253将全部为0

因此,@ user2615302是正确的,您应该保持浮动