【问题标题】:convert scientific notation float value to a decimal variable (4gl, informix)将科学计数法浮点值转换为十进制变量(4gl,informix)
【发布时间】:2013-11-07 19:57:00
【问题描述】:

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

【问题讨论】:

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

标签: sql informix 4gl


【解决方案1】:

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

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

转换为:0.00

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      根据Wolfram Alpha的值

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-19
        • 2016-08-17
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 2021-03-30
        相关资源
        最近更新 更多