【问题标题】:Oracle: Decimal and roundingOracle:小数和四舍五入
【发布时间】:2013-05-01 18:58:48
【问题描述】:

我在表中有一个值 0.0821,我想将其转换为 8.21。

我的 SQL 查询是to_char(round(prdll_yr2.rate_chg_pct_qty *100 ),'9.99')

但它返回 8.00 而不是 8.21。

【问题讨论】:

  • 仅仅乘以 100 就得到了值 prdll_yr2.rate_chg_pct_qty *100
  • 好的。但是,如果您的值是 0.08211,您希望从查询中得到什么结果? 8.21 还是 8.211?您还想要返回数字数据类型还是字符?
  • 我要返回8.21
  • 乘以 100 不会这样做,您可能需要根据 rate_chg_pct_qty 的比例和精度对值进行四舍五入

标签: sql oracle decimal rounding


【解决方案1】:
to_char(round(0.0821 *100,2 ),'9.99')

to_char(round(prdll_yr2.rate_chg_pct_qty *100,2 ),'9.99')

你错过了在回合中显示的小数位数...它将default to 0 if omitted

或者举个例子:

select to_char(round(0.0821 *100,2 ),'9.99') from dual;

结果:8.21

select to_char(round(0.0821 *100),'9.99') from dual;

结果:8.00

----------------给出新信息:--------------- ------------

to_char(round(0.0821 *100,2 ),'9,999.99')   

将 9,999.99 format 调整为等于数据库中允许的小数位数和精度。因此,如果您的值为 Numeric(9,5),则这意味着 4 个前导数字后跟 5 个小数位。由于您要乘以 100,因此您可能拥有的最大值是小数点前 6 个位置,因此 999,999.99 的格式和小数点后 3 位将是“四舍五入”

【讨论】:

  • 当我选择 to_char(round(0.0821 *100,2),'9.99') from dual;结果以下列格式显示:#####
  • @user1683763 - 当您运行该确切查询时,或者当您使用表数据时?您的值是否 >= 0.1?这将转换为 10.0(或更高),这对于该数字格式来说数字太多,并且将显示为散列(通过 SQL*Plus)。如果您需要处理这些,请根据可能的最大值设置为 '99.99''999.99' 等。
  • 在这种情况下,您不需要调用ROUND,因为您的TO_CHAR 格式无论如何都会这样做。
  • 同意。但不知道 OP 想要的结果是什么数据类型,我把它全部留在原地。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
相关资源
最近更新 更多