如何获得Haskell Double的n位数?

时间:2016-07-06 18:20:06

标签: haskell double

我想要一个函数digits :: Double -> Int -> Double,它给出一个双精度数的n位数(必须是圆形的!)并且只返回一个新的双精度数字。

示例:digits 1.2345 3 -> 1.235

我可以使用字符串来实现它,但我认为有更好的解决方案。 知道如何实现这个功能吗?

提前致谢!

1 个答案:

答案 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上找到它们)。