Mercurial > gemma
changeset 5260:771984cb74d8
Merged branch new-fwa.
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Wed, 13 May 2020 11:44:22 +0200 |
parents | 680be197844d (current diff) 0446a6e230b4 (diff) |
children | 93b95ac2cf5b |
files | pkg/common/round.go |
diffstat | 2 files changed, 6 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/common/round.go Wed May 13 11:28:34 2020 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -// This is Free Software under GNU Affero General Public License v >= 3.0 -// without warranty, see README.md and license for details. -// -// SPDX-License-Identifier: AGPL-3.0-or-later -// License-Filename: LICENSES/AGPL-3.0.txt -// -// Copyright (C) 2019 by via donau -// – Österreichische Wasserstraßen-Gesellschaft mbH -// Software engineering by Intevation GmbH -// -// Author(s): -// * Sascha Wilde <wilde@sha-bang.de> - -package common - -import ( - "math" - "sort" - "time" -) - -// SumPreservingRound rounds the values of arr preserving the sum. -func SumPreservingRound(arr []float64) []int { - - type rest struct { - key int - rest float64 - } - - var ( - result = make([]int, len(arr)) - rests = make([]rest, len(arr)) - sum float64 - newSum int - ) - - // floor all values - for i, v := range arr { - sum += v - result[i] = int(v) - newSum += int(v) - rests[i] = rest{key: i, rest: v - float64(result[i])} - } - - // spread delta over values with highest rest - sort.Slice(rests, func(i, j int) bool { - return rests[i].rest > rests[j].rest - }) - - // find the difference in sums - delta := int(math.Round(sum)) - newSum - for _, v := range rests { - if delta <= 0 { - break - } - result[v.key]++ - delta-- - } - - return result -} - -// RoundToFullDays rounds durations to full days. -func RoundToFullDays(durations []time.Duration) []int { - days := make([]float64, len(durations)) - for i, v := range durations { - days[i] = v.Hours() / 24 - } - return SumPreservingRound(days) -}
--- a/pkg/controllers/fwa.go Wed May 13 11:28:34 2020 +0200 +++ b/pkg/controllers/fwa.go Wed May 13 11:44:22 2020 +0200 @@ -432,7 +432,12 @@ } } - // TODO: Log missing LDCs + for i, days := range missingLDCs { + if missingLDCs[i] > 0 { + log.Printf("warn: Missing LDCs for %s on %d days.\n", + bns[i].id, days) + } + } out.Flush() if err := out.Error(); err != nil {