如何从 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
在 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