【问题标题】:Haskell int to float and char to floatHaskell int 浮动和 char 浮动
【发布时间】:2011-05-07 09:59:39
【问题描述】:

haskell 中是否有一个函数可以从 int 转换为 float,从 char 转换为 float?

我知道有一个函数可以将 char 转换为 int 再将 int 转换为 char。

【问题讨论】:

标签: haskell floating-point int


【解决方案1】:

fromIntegral 将从 Int 转换为 Float。

对于 Char 到 Float,这取决于。如果要获取 Char 的 ASCII 值(暂时忽略 Unicode),请使用 Data.Char.ord:

Prelude Data.Char> fromIntegral (ord '2') :: Float
50.0

如果你想读取一个字符的数字,即'2'变成2的值,你可以这样做:

char2float :: Char -> Float
char2float n = fromInteger (read [n])

Prelude Data.Char> char2float '2'
2.0

如果您打算做很多这样的事情,您可能会考虑使用实际的解析库来获得实际的错误处理。

【讨论】:

  • 你可以做char2float n = read [n]。不需要fromInteger
【解决方案2】:

此类问题可以通过hoogle回答。

例如,Hoogle for "Char -> Int" 和列出的第一个函数会做到这一点(ord,在其他答案中提到,是第二个结果):

digitToInt :: Char -> Int

虽然您需要函数 :: Char -> Float 确实需要使用 read(第三个结果)或 digitToInt 和函数 :: Int -> Float 的组合:

digitToFloat = toEnum . digitToInt

【讨论】:

  • 我知道有一个像digitToInt这样的函数,但是我懒得去找了。谢谢!
【解决方案3】:

你试过了吗:

intToFloat :: Int -> Float
intToFloat n = fromInteger (toInteger n)

Additionally see here

【讨论】:

    【解决方案4】:

    如果我没看错,您可以将 Read typeclass 用于这些目的。这意味着您可以将一些基本类型转换为其他一些基本类型。

    从 Int 转换为 Float:

    Prelude> 1::Float
    1.0
    

    但是我不知道这意味着从 char 转换为 Float - 也许 [Char] 转换为 Float 或 String 转换为 Float?无论如何:

    Prelude> read("1")::Float
    1.0
    

    查看此链接:http://book.realworldhaskell.org/read/using-typeclasses.html

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多