我正在尝试在标准 ML 中格式化一些输出。我需要显示一些实际值四舍五入到某个小数位,我还需要能够使用科学计数法显示一些实际值。
打印功能的签名是
val it = fn : string -> unit
这似乎不允许使用格式代码或任何其他参数。我也没有运气在网上找到文档。理想情况下,我希望 SML 中的打印功能与 C 中的 printf 具有相似的功能......
我正在尝试在标准 ML 中格式化一些输出。我需要显示一些实际值四舍五入到某个小数位,我还需要能够使用科学计数法显示一些实际值。
打印功能的签名是
val it = fn : string -> unit
这似乎不允许使用格式代码或任何其他参数。我也没有运气在网上找到文档。理想情况下,我希望 SML 中的打印功能与 C 中的 printf 具有相似的功能......
标准 ML 是一种静态类型语言。很难以printf
类型安全的方式制作类似的东西。
SML 基础库包含一些数字的格式化操作。但是使用它们相对冗长并且相对难以弄清楚。例如,要将实数格式化为小数点后 3 位的科学记数法字符串,您可以执行以下操作:
Real.fmt (StringCvt.SCI (SOME 3)) 4324423423.5; (* evaluates to string "4.324E9" *)
丑陋,对吧?
一些实现提供了其他格式化方法。例如,SML/NJ 的Format
结构允许您使用printf
-style 格式化字符串。但是,参数必须根据它们的类型进行包装:
Format.format "%.3e" [Format.REAL 4324423423.5]; (* evaluates to string "4.324e09" *)
其他 SML 实现可能有自己的自定义格式化函数。