|
@@ -158,6 +158,7 @@ func GetPercentileData(chartInfoId int, startDate, endDate string, mappingInfo *
|
|
|
// 百分位数据个数算法
|
|
|
// 数据区间第一个和最后一个数据点的时间和数据分别为(T1,S1)(T2,S2); N=T1到T2指标数据个数, n=小于等于S2的数据个数
|
|
|
// 个数百分位=(n-1)/(N-1)
|
|
|
+ maxDay := len(dataList) // 往前找数据的边界
|
|
|
if percentType == utils.PercentCalculateTypeNum {
|
|
|
for i, d := range dataList {
|
|
|
// T2为当前日期
|
|
@@ -166,7 +167,11 @@ func GetPercentileData(chartInfoId int, startDate, endDate string, mappingInfo *
|
|
|
|
|
|
// 计算N和n
|
|
|
var bigN, tinyN int
|
|
|
- for k := 0; k < calculateDay; k++ {
|
|
|
+ for k := 0; k < maxDay; k++ {
|
|
|
+ // 往前找(时间长度)个有数据的, N理论上只有最前面几个日期<calculateDay, 后面的N=calculateDay
|
|
|
+ if bigN >= calculateDay {
|
|
|
+ break
|
|
|
+ }
|
|
|
preVal, preOk := dataMap[t2.AddDate(0, 0, -k)]
|
|
|
if !preOk {
|
|
|
continue
|
|
@@ -177,8 +182,8 @@ func GetPercentileData(chartInfoId int, startDate, endDate string, mappingInfo *
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // N=1时说明计算无效
|
|
|
- if bigN == 1 {
|
|
|
+ // N<=1时说明计算无效
|
|
|
+ if bigN <= 1 {
|
|
|
continue
|
|
|
}
|
|
|
numerator := decimal.NewFromInt(int64(tinyN - 1))
|