0

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

4

3 回答 3

3

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

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

转换为:0.00

所以,你当然会失去价值,但至少它不会产生错误。

于 2013-12-10T12:22:23.420 回答
2

decimal [ (p[ ,s] )] 和 numeric[ (p[ ,s] )] 固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。

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

所以这是不可能的,因为这个数字太小了,你应该把它放在浮动中

于 2013-11-07T21:27:35.987 回答
1

根据Wolfram Alpha的值

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

这意味着您必须将小数位移动 256 次。您正在尝试将该 TINY 数字拟合为 2。您的小数位 1 到 253 将全部为 0

因此,@user2615302 是正确的,你应该让它保持浮动

于 2016-11-16T18:23:26.240 回答