繁体   English   中英

类型转换如何在Haskell中工作?

[英]How does type casting work in Haskell?

我希望能够以类似于Java的方式截断floatdouble(int)5.583

我做了一些研究,据我所知,Prelude中没有任何内容可以导入。 所以我想知道如何构建一个能够完成它的函数。 我想也许如果我确实show 5.583 ,然后将子字符串带到小数点然后将其转换为Int ,但这似乎只在使用递归时非常低效。 那么有更简单的方法吗?

我希望能够截断floatdouble

令人愉快的是,将小数截断为积分的函数被命名为“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

但对于浮点数到整型我推荐使用ceilingroundfloor ,并fromIntegral为backwads转换。

编辑 :在仔细阅读问题后,@ Chris Martin的回答是正确的:

λ> :t truncate
truncate :: (Integral b, RealFrac a) => a -> b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM