Idris,通过删除小数点(floor)从 Double 转换为 Nat

Idris, convert from a Double to a Nat by dropping the decimal points (floor)

在 Idris 中,如何通过 floor 将 Double 转换为 Nat,删除小数点。 我试过演员表:

cast {to=Nat} num

但是没有用。

When checking an application of function Main.takeLeftOfHalfLength:
        Can't cast from Double to Nat

好吧,这是意料之中的,因为演员表的工作方式不是很明确,信息丢失。

不过我还是想从Double转Nat,请问有什么办法吗?


我发现了 divNat 函数,它可以让我划分一个 Nat,但我会把问题留在这里

我们可以使用 floor,转换为 Integer,然后使用 integerToNat:

Main> integerToNat $ cast {to = Integer} $ floor 3.9
3

类似地,ceiling 可用于向上舍入 Nat:

Main> integerToNat $ cast {to = Integer} $ ceiling 3.9
4