我的工作哈斯克尔解析,我想分析这样解析和读取浮点值在Haskell
946685561.618847
我没有问题,认识到(解析)表示的时间戳值它,但我的问题是关于结果的类型。我想到两种情况:
- Haskell中是否存在小数类型,以便结果可以与小数值相关联?
- 如果不是这种情况,那么如何存储这个值,因为
Int
范围从-2 至2 - 1?
我的工作哈斯克尔解析,我想分析这样解析和读取浮点值在Haskell
946685561.618847
我没有问题,认识到(解析)表示的时间戳值它,但我的问题是关于结果的类型。我想到两种情况:
Int
范围从-2 至2 - 1?实际上有多种小数类型 - 甚至有整个Fractional
类。
最常用的是Double
,它是一个双精度浮点数。您也可以使用单精度的Float
。
另一种替代方法是使用Rational
类型,该类型允许您以两个Integer
的比率存储数字。 (巧合的是,Integer
是无限整型。Int
是有界版本的名称)。
这些类型(Double
,Float
和Rational
)有利于合理的存储值。如果你只是想存储一个大的整数值,使用无限制的Integer
。 (也就是说,它可以存储任意大小的整数。)
这些中的任何一个当然可以使用例如'读取“123.456”:: Double',除了需要像'read“15432%125”'这样的语法的'Rational'。 – dflemstr 2012-02-21 11:21:43
如果你需要的精度是(ahem)_fixed_,我会使用'Data.Fixed'而不是Rational。除非我正在与另一个存储IEEE浮点数的系统进行互操作,否则我会小心存储双精度。如果您需要快速计算,则在序列化和反序列化它们时,可以将“固定”更改为“双精度”,则会按预期进行四舍五入。 – 2012-02-21 13:58:23
问题是这是否真是一个真正的小数值,或者如果最好将它解释为适当单位的整数。即如果您的输入是毫秒值,您可能需要将其转换为积分纳秒值。 – Ingo 2012-02-21 10:36:49