代码之家  ›  专栏  ›  技术社区  ›  bd528

在Oracle中使用round时结果不一致

  •  0
  • bd528  · 技术社区  · 6 年前

    我有一个预言功能由于隐私问题,我不能包含整个功能,但相关行是:

    WHEN in_tariff_length = 36 THEN round( ( ( (in_agreed / 100) * 80) * in_uplift) / 100,2) * 3
    

    …四舍五入到小数点后2位,返回1655.58

    当我使用

    WHEN in_tariff_length = 36 THEN round( ( ( (in_agreed / 100) * 80) * in_uplift) / 100,3) * 3
    

    …四舍五入到小数点后3位,返回1655.568

    我需要的结果是1655.57。

    发送到函数和从函数返回的所有值都是数字。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Paweł Prusinowski    6 年前

    你不能把某物四舍五入,乘以3得到1655.57

    551.86 * 3 = 1655.58
    551.856 * 3 = 1655.568
    1655.57 / 3 = 551.856666667
    

    我建议先乘,再乘。

        2
  •  0
  •   krokodilko    6 年前

    请仔细看第二个函数

    round( ( ( (in_agreed / 100) * 80) * in_uplift) / 100,3) 
    

    Round( something, 3) 意思是圆到 小数点后3位 但不是2