【发布时间】:2014-12-22 18:20:07
【问题描述】:
我是一个完全的 Haskell 初学者,刚刚发现read 在给定一个以 . 而不是数字开头的十进制数字时会吐出一个异常。例如,在 ghci 中:
Prelude> read ".7" :: Float
*** Exception: Prelude.read: no parse
我找到了one discussion,这是有道理的,为什么在 Haskell 中需要用数字包围 .。 Another discussion 也有点帮助,但没有人提供如何将".7" 实际转换为0.7 的解决方案。
所以,我正在尝试从一个固定宽度的格式文件中提取数据,该文件包含具有 .7 等值的字段---是否有标准函数或方法可以用来将其清理为浮点数 0.7 ?
(在我遇到这个问题之前,我的基本想法是为我的数据定义一个自定义类型,在Data.List.Split 中使用splitWidth 将每一行拆分为其字段,然后使用read 将每个字段转换为其正确的类型,尝试在实际实现中应用 this answer 中的功能优势。)
【问题讨论】:
-
我不确定您在寻找什么。您提到了一次尝试,但未显示任何代码。你真的只想要
myRead = read . ('0':) :: String -> Float吗? -
@ThomasM.DuBuisson 谢谢,是的,应该这样做!您的
myRead不适用于负数,但幸运的是我不必担心。
标签: parsing haskell decimal-point