【发布时间】:2021-07-13 13:49:37
【问题描述】:
假设我有 0.0,如何将其转换为 0?
我知道我可以使用 Real.fromInt(0) 做相反的事情 (0 -> 0.0),但是 Real 到 Int 呢?
在 SML 文档中,我读到了一个函数 toInt,但没有示例,所以我可能以错误的方式使用它。
我试过了:
Real.toInt(a)val a Real.toInt;
都错了……
【问题讨论】:
假设我有 0.0,如何将其转换为 0?
我知道我可以使用 Real.fromInt(0) 做相反的事情 (0 -> 0.0),但是 Real 到 Int 呢?
在 SML 文档中,我读到了一个函数 toInt,但没有示例,所以我可能以错误的方式使用它。
我试过了:
Real.toInt(a)val a Real.toInt;
都错了……
【问题讨论】:
Real.toInt 的类型为 IEEEReal.rounding_mode -> real -> int,因此它要求您指定舍入模式。例如:
Real.toInt IEEEReal.TO_NEAREST 1.2;
计算为1。
在日常编程中几乎没有理由使用Real.toInt。相反,只需使用round, floor, ceil, trunc 之一——分别对应于TO_NEAREST, TO_NEGINF, TO_POSINF, TO_ZERO 的4 种舍入模式的函数。换句话说,不要使用Real.toInt IEEEReal.TO_NEAREST 1.2,而是使用round 1.2。在这四个函数中,trunc 对应于int() 在 Python(和其他语言)中的工作方式,因此可能是最熟悉的一个。
我能看到使用Real.toInt 的唯一情况是,如果您想试验不同的舍入模式如何影响计算。除非您为舍入模式使用一个变量,该变量在不同的调用中采用不同的值,否则使用具有硬连线舍入模式的四个转换函数之一更具可读性。
【讨论】: