Haskell中如何将数字保留两位小数?已有函数需嵌入处理
在Haskell中截断数字到两位小数的方法
你用round不行是因为round是四舍五入到整数,直接用round $ x只会把数值转成整数,比如round 1.98887779得到的是2,完全不符合需求。要实现截断到两位小数(比如1.98887779变成1.98),可以用下面几种方法:
方法一:通过数学运算截断数值
利用truncate函数截断小数部分,配合乘除100来控制保留位数:
truncateToTwo :: Double -> Double truncateToTwo x = fromIntegral (truncate (x * 100)) / 100
测试这个函数:
truncateToTwo 1.98887779 -- 结果为1.98
truncate (x * 100)会把1.98887779 * 100 = 198.887779截断成整数198fromIntegral把整数转成浮点数,再除以100就得到1.98
如果需要处理Float类型,把Double换成Float即可。
方法二:格式化输出时直接控制显示(先截断再输出)
如果只是需要输出时显示两位小数,不需要修改原始数值,可以先截断再用printf格式化:
import Text.Printf main = do let num = 1.98887779 printf "%.2f\n" (truncateToTwo num) -- 控制台输出1.98
注意浮点数精度问题
浮点数运算偶尔会出现微小精度误差,比如truncateToTwo 1.98可能会显示为1.9799999999999998,这时候用printf格式化输出就能避免这个问题,它会自动处理成友好的显示格式。
内容的提问来源于stack exchange,提问作者ali Mustapha
相关产品推荐
相关产品推荐

