You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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截断成整数198
  • fromIntegral把整数转成浮点数,再除以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:25:27