我需要将数字列表除以100来打印,例如:
map (/100) [29, 3, 12]
产生:
[0.29,3.0e-2,0.12]
然而我需要:
[0.29,0.03,0.12]
我如何在Haskell中执行此操作?任何想法真的很感激。
答案 0 :(得分:6)
0.03
和3.0e-2
的号码相同。在内部,GHC使用showFloat
来打印它,只要绝对值超出0.1和9,999,999的范围,就会产生科学记数法。
因此,您必须自行打印值,例如Text.Printf
中的printf
或Numeric
中的showFFloat
:
import Numeric
showFullPrecision :: Double -> String
showFullPrecision x = showFFloat Nothing x ""
main = putStrLn (showFullPrecision 0.03)
根据您所需的输出,您需要编写更多功能。
答案 1 :(得分:1)
对我有用的是: 阴谋集团安装编号,然后在GHCi中输入
λ: import Data.Number.CReal
λ: map (/(100 :: CReal)) [29,3,12]
[0.29,0.03,0.12]
答案 2 :(得分:0)
非常感谢你的所有评论,现在我明白了我不介意使用变通方法的问题。代码是根据每个部分开始的时间找到音乐部分的长度 - 以1.28的形式持续1分28秒。现在结果是一个列表,其中时序为字符串,但这不是问题。对于任何感兴趣的人,这里有解决方法的功能:
subtractMinutes :: RealFrac a => [a] -> [[Char]]
subtractMinutes (x:xs) = take (length (xs)) (zz : subtractMinutes xs)
where ya = (head(xs) - x) * 100
ys = truncate (head(xs)) - truncate(x)
yz = ya - (fromIntegral(ys) * 40)
yx = round(yz)
za = div yx 60
zs = mod yx 60
zz = show(za) ++ "." ++ zx
zx = if zs < 10 then "0" ++ show(zs) else show(zs)