在程序中,我计算一个百分比并将其打印给用户.问题是打印的百分比显示的小数点太多.我搜索了一个解决这个问题的函数,没找到,并编写了下面的舍入函数,但我想知道是否有更标准的方法来代替.此外,这个Java主题中描述的想法非常简洁,如果已经有功能这样做,我很想知道.
roundTo :: (Integral int1, Integral int2) => int1 -> Double -> Either int2 Double
roundTo digitsAfterComma value
| (digitsAfterComma >= 1) =
let
factor = fromIntegral (10 ^ digitsAfterComma)
result = ((/ factor) . fromIntegral . round . (* factor)) value
in
Right result
| (digitsAfterComma == 0) = Left (round value)
| otherwise = error "minimal precision must be non-negative"
Run Code Online (Sandbox Code Playgroud)
更新:接下来是一个更完整的版本,这要归功于我收到的一些答案.
import qualified Text.Printf as T
showPercentage :: (Integral a, Show a) => a -> Double …Run Code Online (Sandbox Code Playgroud)