无法将IEEEReal.rounding_mode与真实统一起来

时间:2016-04-27 16:42:04

标签: floating-point integer type-conversion sml

当我尝试将real转换为这样的int时,为什么会出现错误?

fun stuff a  =
  Real.toInt a

错误:

Error-Can't unify IEEEReal.rounding_mode with real (Different type constructors) Found near stuff
(0.0)

1 个答案:

答案 0 :(得分:4)

也许您忽略了Real.toInt : IEEEReal.rounding_mode -> real -> int,即采用指定how rounding is made的附加参数。如果您不想指定此额外参数,例如像

fun round x = Real.toInt IEEEReal.TO_NEAREST x

你可以使用其中一个功能

  • Real.floor : real -> int,它假定为IEEEReal.TO_NEGINF
  • Real.ceil : real -> int,它假定为IEEEReal.TO_POSINF
  • Real.trunc : real -> int,假定为IEEEReal.TO_ZERO
  • Real.round : real -> int,它假定为IEEEReal.TO_NEAREST

有趣的事实:函数Real.toIntactually defined in terms of these four functions