Haskell中如何将浮点数0.03输出为十进制格式而非3.0e-2科学计数法?
Haskell 浮点数输出普通十进制小数的方法
Haskell 中默认的Show类型类实例对绝对值过小或过大的浮点数会自动采用科学计数法输出,要得到固定的十进制小数格式,可使用以下两种常见方案:
方案1:使用Text.Printf格式化输出
和C语言的printf用法一致,通过格式符指定输出样式即可:
-- 首先导入模块 import Text.Printf -- 示例:保留2位小数输出0.03 printf "%.2f" 0.03 -- 输出结果为 "0.03"
- 格式符
%f表示输出非科学计数的浮点数,前面的.n可以指定保留的小数位数。
方案2:使用Numeric模块的showFFloat函数
如果需要动态控制小数位数或者自动省略末尾多余的0,可以使用Numeric模块的showFFloat:
import Numeric -- 自动选择合适的小数位数,无多余后缀0 showFFloat Nothing 0.03 "" -- 输出结果为 "0.03" -- 固定保留4位小数 showFFloat (Just 4) 0.03 "" -- 输出结果为 "0.0300"
- 第一个参数为
Just n时固定保留n位小数,为Nothing时自动适配最优小数位数 - 末尾需传入空字符串,因为
showFFloat返回的是ShowS类型的字符串拼接函数
高精度场景建议
如果业务场景对数值精度要求高,建议避免使用原生Float/Double类型,改用任意精度十进制Scientific类型,可以彻底避免浮点精度误差,同时也自带了友好的十进制字符串输出方法。
内容的提问来源于stack exchange,提问作者user15277323
相关产品推荐
相关产品推荐

