msaelices
msaelices
MModular
Created by msaelices on 5/5/2024 in #questions
convert error: 'Int' to 'IntLiteral' trying to implement the FloatLiteral.__round__(ndigits) method
I'm trying to contribute implementing the FloatLiteral.round() method with the current implementation:
@always_inline("nodebug")
fn __round__(self, ndigits: IntLiteral = 0) -> Self:
"""Return the rounded value of the FloatLiteral.

Args:
ndigits: The number of digits to round to. Defaults to 0.
Returns:
The rounded value.
"""
# Handle special values first.
if not self._is_normal():
return self

var pow: IntLiteral = 10 ** ndigits
var to_round: Self = self * Self(pow)
var truncated: IntLiteral = to_round.__int_literal__()
var result: Self
if self.__abs__() - Self(truncated).__abs__() < 0.5:
result = Self(truncated)
elif self > 0:
result = Self(truncated + 1)
else:
result = Self(truncated - 1)
if ndigits > 0:
result = result / (Self(10.0) ** ndigits)
return result
@always_inline("nodebug")
fn __round__(self, ndigits: IntLiteral = 0) -> Self:
"""Return the rounded value of the FloatLiteral.

Args:
ndigits: The number of digits to round to. Defaults to 0.
Returns:
The rounded value.
"""
# Handle special values first.
if not self._is_normal():
return self

var pow: IntLiteral = 10 ** ndigits
var to_round: Self = self * Self(pow)
var truncated: IntLiteral = to_round.__int_literal__()
var result: Self
if self.__abs__() - Self(truncated).__abs__() < 0.5:
result = Self(truncated)
elif self > 0:
result = Self(truncated + 1)
else:
result = Self(truncated - 1)
if ndigits > 0:
result = result / (Self(10.0) ** ndigits)
return result
But I'm receiving the error: cannot implicitly convert 'Int' value to 'IntLiteral' in 'var' initializer in the var pow: IntLiteral = 10 ** ndigits line If I change the type to from IntLiteral to Int this will move the error to the following line, the to_round declaration .
2 replies