如何从 HELM 模板除法操作中获得浮点数结果?

How to get a float result from a HELM template division operation?

在 helm 中,有数学函数 https://helm.sh/docs/chart_template_guide/function_list/#math-functions 并且它们有一个 div 函数可以除以整数!但是有什么办法可以得到除法的小数结果吗?

我需要从百分比中得到一个单位区间。

所以如果值为 90 我需要得到 0.9,如果它是 2 我需要 0.02。

谢谢

很遗憾,Helm 模板中没有支持浮点除法的函数。

最简单的方法是注册一个执行转换和除法的自定义函数。

如果您无法注册您的自定义函数,仍然可以使用帮助模板中的可用方法来完成此操作。

您可以构造一个包含预期结果的浮点表示的字符串,并使用 float64 Helm 模板函数将该字符串解析为 float64 值。

它可能是这样的:

{{ printf "%d.%02d" (div . 100) (mod . 100) | float64 }}

如果百分比是100,第一个数字将是1,否则是0。然后是一个点和百分比的 2 位数字值,因此使用此格式字符串,您将获得浮点表示形式。将其传递给 float64 函数,它将对其进行解析并将其 return 作为 float64 值。

正在测试:

    t := template.Must(template.New("").Funcs(template.FuncMap{
        "div":     func(a, b int) int { return a / b },
        "mod":     func(a, b int) int { return a % b },
        "float64": func(s string) (float64, error) { return strconv.ParseFloat(s, 64) },
    }).Parse(`{{range .}}{{ printf "%d.%02d" (div . 100) (mod . 100) | float64 }}
{{end}}`))

    if err := t.Execute(os.Stdout, []int{0, 2, 90, 100}); err != nil {
        panic(err)
    }

输出(在 Go Playground 上尝试):

0
0.02
0.9
1