Why is it important to you to have a float? Once you've truncated it, you have a rational number, by definition. Are you sure you want to truncate the number, rather than performing the truncation in the presentation layer?
In my case, this is only for presentation. The real float doesn't change. And anyway rounded and truncated doesn't change the number value as they are immutable.
a := 3.4456. a rounded. a "-> 3.4456"
You meant maybe I use ScaledDecimal instead of Float?