[英]How does type casting work in Haskell?
我希望能够以类似于Java的方式截断float
或double
: (int)5.583
。
我做了一些研究,据我所知,Prelude中没有任何内容可以导入。 所以我想知道如何构建一个能够完成它的函数。 我想也许如果我确实show 5.583
,然后将子字符串带到小数点然后将其转换为Int
,但这似乎只在使用递归时非常低效。 那么有更简单的方法吗?
我希望能够截断
float
或double
令人愉快的是,将小数截断为积分的函数被命名为“truncate”。
https://www.stackage.org/haddock/lts-8.4/base-4.9.1.0/Prelude.html#v:truncate
λ> truncate 5.583
5
它的类型是
truncate :: (Real a, Fractional a, Integral b) => a -> b
这只是一个普通的功能。 Haskell没有任何语言功能(或者kludge,如果你愿意的话)类似于Java中的类型转换。
使用ghc转换浮点数是可能的:
λ> :m GHC.Float
λ> :t float2Double
float2Double :: Float -> Double
λ> :t double2Float
double2Float :: Double -> Float
λ> :t double2Int
double2Int :: Double -> Int
λ> :t float2Int
float2Int :: Float -> Int
λ> :t int2Double
int2Double :: Int -> Double
λ> :t int2Float
int2Float :: Int -> Float
但对于浮点数到整型我推荐使用ceiling
, round
和floor
,并fromIntegral
为backwads转换。
编辑 :在仔细阅读问题后,@ Chris Martin的回答是正确的:
λ> :t truncate
truncate :: (Integral b, RealFrac a) => a -> b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.