0
我一直在努力学习的Haskell几天,但我不能看到弄清楚如何创建应答/输出这是一个浮动,以一个双哈斯克尔从浮到双
module SpaceAge (Planet(..), ageOn) where
-- calculate seconds to an age on different planets
data Planet = Earth
| Jupiter
| Mars
| Mercury
| Neptune
| Saturn
| Uranus
| Venus
-- one year has 31557600 seconds
orbitalPeriodInSeconds :: Planet -> Float
orbitalPeriodInSeconds planet = 31557600 * multiplier where
multiplier = case planet of
Earth -> 1.0
Jupiter -> 11.862615
Mars -> 1.8808158
Mercury -> 0.2408467
Neptune -> 164.79132
Saturn -> 29.447498
Uranus -> 84.016846
Venus -> 0.61519726
-- user input example: ageOn Venus 9303000
ageOn :: Planet -> Float -> Float
ageOn planet seconds = seconds/orbitalPeriodInSeconds planet
答案/输出将是一个浮点数,但我需要得到一个double。 例
* 4,1> ageOn水星2134835688
280.87936
但我需要280.88
Offcourse如果我改变浮动为Double,因为它期待一个浮动的编译器会引发错误。
我觉得有一个误解,在这里:'280.87936'和'280.88'可以都'Float' *或*'Doubles' 。你真的需要一个'Double',还是你想回答两个小数点? –
'orbitalPeriodInSeconds'不需要返回'Float';它可以返回一个多态值,其类型是'Fractional'类类的一个实例。 ('orbitalPeriodInSeconds :: Fractional a => Planet - > a')。 'ageOn :: Fractional a => Planet - > a - > a'也是一样。 – chepner
可能是http://stackoverflow.com/questions/1559590/haskell-force-floats-to-have-two-decimals –