Haskell:将 Double 转换为 Int

标签 haskell type-conversion

我想从固定基数计算“我必须使用哪个数字的幂”,例如2.

我想找到一个数字的下一个(整数)幂,例如2 ^ 3 = 8 ==> get2Power 8 ==> 3 .

这很简单,但是 get2Power 10 ==> 42^3=8作为下限和 2^4=16作为上限,我想返回上限,4 .

通过简单的数学,我知道我可以用一些对数函数来计算功率,即 log(x) / log(2)结果是双倍。但是我要下一个Integer .

我的方法看起来像

get2Power :: Integer -> Integer
get2Power x 
  | x <= 0 = -1
  | otherwise = round (log(x) / log (2))     

失败的原因是缺少类型之间的一些转换。错误消息无助于了解我遗漏了什么。

有人可以帮我了解如何将 Double 结果转换为 Integer/int 吗?

最佳答案

对于登陆此页面的人来说,它的标题是“将 double 转换为整数”。 Haskell Prelude 中有三个函数可以提供帮助: round , floorceiling .

下面是一个例子:

Prelude> let myFloat = 3.1415 :: Double
Prelude> let y = round myFloat :: Int
Prelude> y
3
Prelude> :type y
y :: Int

关于Haskell:将 Double 转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399943/

相关文章:

c# - 为什么 "decimal.TryParse()"在下面的代码中对于输入字符串 "-1"总是返回 0?

javascript - == 和 != 已经变成不好的做法了吗?

haskell - 您将如何在 AWS 上托管 Haskell Web 应用程序?

haskell - 如何在 Dhall 中定义和使用类似 Haskell 的 sum 类型

haskell - 了解 Haskell 并行斐波那契结果

c++ - 将 float 缩放到整个 unsigned int 范围

mysql - Laravel DB 查询数组

c++ - 将 unsigned char * 转换为字符串

haskell - haskell中的简单字数统计

haskell - 仿函数是 for (a -> b) -> (f a -> f b),什么是 for (Category c) => c a b -> c (f a) (f b)?