【发布时间】:2011-05-07 09:59:39
【问题描述】:
haskell 中是否有一个函数可以从 int 转换为 float,从 char 转换为 float?
我知道有一个函数可以将 char 转换为 int 再将 int 转换为 char。
【问题讨论】:
标签: haskell floating-point int
haskell 中是否有一个函数可以从 int 转换为 float,从 char 转换为 float?
我知道有一个函数可以将 char 转换为 int 再将 int 转换为 char。
【问题讨论】:
标签: haskell floating-point int
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。
此类问题可以通过hoogle回答。
例如,Hoogle for "Char -> Int" 和列出的第一个函数会做到这一点(ord,在其他答案中提到,是第二个结果):
digitToInt :: Char -> Int
虽然您需要函数 :: Char -> Float 确实需要使用 read(第三个结果)或 digitToInt 和函数 :: Int -> Float 的组合:
digitToFloat = toEnum . digitToInt
【讨论】:
【讨论】:
如果我没看错,您可以将 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
【讨论】: