我想要一个函数digits :: Double -> Int -> Double
,它给出一个双精度数的n位数(必须是圆形的!)并且只返回一个新的双精度数字。
示例:digits 1.2345 3 -> 1.235
我可以使用字符串来实现它,但我认为有更好的解决方案。 知道如何实现这个功能吗?
提前致谢!
答案 0 :(得分:3)
一种相对简单的方法是乘以十和圆的适当幂,然后除以十的幂。例如:
digits d n = fromInteger (round (d * 10^n)) / 10^n
在ghci:
> digits 1.2346 3
1.235
> digits 1.2344 3
1.234
> digits 1.2345 3
1.234
最后一个例子显示Haskell默认使用银行家的舍入,因此它不会完全符合您的规范 - 但也许它足够接近,无论如何都是有用的。如果你真的需要它们,很容易实现其他的舍入变体(或者在Hackage上找到它们)。