Aller au contenu

Problème du modulo#

  • Changement de l’affichage des float : précision à 1 chiffre après la virgule automatique

Modulo ne retourne pas un entier#

let ThirdGroupByte = mod(div(RelativeClusterIndex, nbClusterPerGroup), 256)
let GroupCidr = "10.0.\(ThirdGroupByte).0/24"

Cue 0.4 GroupCidr = "10.0.128.0/24"

Cue 0.7 GroupCidr = "10.0.128.0.0/24"

Non ce n’est pas IPv5

Explication#

  • les fonctions mod, div, etc (toutes les fonctions de Math en go/cue) retournent un float.
  • En cue 0.4, l’interpolation retour la valeur la plus courte "2.5 → 2.5" mais "2.0 → 2" et "0 → 0"
  • En cue 0.7, l’interpolation retour la valeur avec une précision de 1 nombre après la virgule (il me semble) "2.5 → 2.5" mais "2.0 → 2.0" et "0 → 0.0"

Solution#

On fait la conversion en string manuellement.

let ThirdGroupByte = mod(div(RelativeClusterIndex, nbClusterPerGroup), 256)
let StrThirdGroupByte = strconv.FormatFloat(ThirdGroupByte, 102, 0, 64)
let GroupCidr = "10.0.\(ThirdGroupByte).0/24"

Précision : la syntaxe normale est strconv.FormatFloat(ThirdGroupByte, 'f', 0, 64), mais le paramètre 'f' est transformé en bytes au lieu de int à cause de cue.

NB : Ce bug est corrigé dans cue 0.8.0