栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

LOG和EXP函数中的舍入问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LOG和EXP函数中的舍入问题

您可以四舍五入为您的数据:

--720000000000000 must be multiple of 600select   round( 719999999999998/600,  0 ) * 600--result: 720000000000000

在SQLFiddle上进行测试

create TABLE T   (     PAR_COLUMN INT,     PERIOD     INT,     VALUE      NUMERIC(22, 6)  ) INSERT INTO T VALUES (1,601,10.1 ),    --<--- I put decimals just to test!(1,602,20 ),(1,603,30 ),(1,604,40 ),(1,605,50 ),(1,606,60 ),(2,601,100),(2,602,200),(2,603,300),(2,604,400),(2,605,500),(2,606,600)

查询1

with T1 as (SELECT *,       Exp(Sum(Log(Abs(NULLIF(VALUE, 0))))  OVER(    PARTITION BY PAR_COLUMN    ORDER BY PERIOD)) AS CUM_MUL,       VALUE AS CUM_MAX1,       LAG( VALUE , 1, 1.)   OVER(    PARTITION BY PAR_COLUMN    ORDER BY PERIOD ) AS CUM_MAX2,       LAG( VALUE , 2, 1.)   OVER(    PARTITION BY PAR_COLUMN    ORDER BY PERIOD ) AS CUM_MAX3FROM   T )select PAR_COLUMN,  PERIOD,  VALUE,        ( round( ( CUM_MUL  / ( CUM_MAX1 * CUM_MAX2 * CUM_MAX3) ) ,6)          *          cast( ( 1000000 * CUM_MAX1 * CUM_MAX2 * CUM_MAX3) as bigint )       ) / 1000000.       as CUM_MULFROM T1

结果

| PAR_COLUMN | PERIOD | VALUE |         CUM_MUL ||------------|--------|-------|-----------------||          1 |    601 |  10.1 | 10.1 | --ok! because my data|          1 |    602 |    20 |  202 ||          1 |    603 |    30 | 6060 ||          1 |    604 |    40 |          242400 ||          1 |    605 |    50 |        12120000 ||          1 |    606 |    60 |       727200000 ||          2 |    601 |   100 |  100 ||          2 |    602 |   200 |20000 ||          2 |    603 |   300 |         6000000 ||          2 |    604 |   400 |      2400000000 ||          2 |    605 |   500 |   1200000000000 ||          2 |    606 |   600 | 720000000000000 |

注意我x1000000可以不使用小数



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414813.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号