Workaround to have int be a decimal?

I get it that an int can’t start with a 0 or a decimal, but is there a workaround for this?

Here’s my use case:

---
sizes: [".25", ".5", "1", "2"]
width: 600
---
{{ $sizes := .Params.sizes}}
{{ $width := .Params.width}}

This parameter is then ranged and each index of the array is multiplied
{{ $multiply_size := mul (int $width) (int (index $sizes $i )) }}

All of this works as long as it’s a whole number. Any ideas on a workaround to get decimals to work in this scenario?

When you multiply an integer with an integer, you get an int as the result.
But when you multiply an integer with a decimal value, you get a decimal value as the result.

You can try something like this:

{{ $widthDecimal := mul (int $width) 1.0 }}
{{ $multiply_size := mul $widthDecimal (int (index $sizes $i )) }}
1 Like

What @Jura said is my go-to truck as well.

In this case though, you simply need to use float instead of int.

(float foo) would be equivalent to (mul foo 1.0).

1 Like

Also, do you need the sizes to be strings? Unfortunately, Hugo converts them to strings anyways internally (ref) but for clarity you can write:

sizes: [0.25, 0.5, 1.0, 2.0]

I didn’t even realise the float function. Thanks! :slight_smile:

With float the code simply becomes if I’m not mistaken:

{{ $multiply_size := mul (int $width) (float (index $sizes $i )) }}
2 Likes

Thanks @Jura and @kaushalmodi using float did the trick!