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

如何解决Erlang代码中第二个io:format抛出的badarg错误?

问题分析与解决

错误原因

badarg错误源于格式字符串与参数类型不匹配。在printResult/5函数中,第二个io:format的格式字符串FormatD使用了浮点数格式符~f,但对应的Time_exec和Time_spawn是整数类型(由time_microseg/0返回的整数计算而来),Erlang的io:format要求格式符与参数类型严格对应,类型不匹配就会抛出badarg。

具体对应关系:

  • Time_exec = TimeEnd - TimeStart,time_microseg/0返回整数,因此Time_exec是整数,却对应格式符~-22f
  • Time_spawn = SpawnEnd - SpawnStart,同样是整数,却对应格式符~-3f

修复方案

有两种直接可行的修复方式:

方式1:将整数参数转为浮点数

在调用io:format时,把整数参数转换为浮点数:

io:format(OutFile, FormatD, [size(Data), R, float(Time_exec), MBps, float(Time_spawn)]).

方式2:修改格式符适配整数

把格式字符串中的~f替换为~g(自动适配整数/浮点数格式),或者~w(打印任意Erlang项):

FormatD = "~-9w\t ~-13w\t ~-22g\t ~-11f\t ~-3g~n",

额外优化建议

  • time_microseg/0函数可改用erlang:monotonic_time(microsecond)替代now(),因为now()在Erlang 18+版本已被废弃,monotonic_time更可靠且性能更优:
time_microseg() ->
    erlang:monotonic_time(microsecond).
  • 如果表头仅需写入一次,建议在打开文件时判断文件是否为空,避免每次运行重复写入表头。

内容的提问来源于stack exchange,提问作者Mery

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:55:09