我不会用PaddedForm这个。事实上,我不确定这PaddedForm对任何事情都有好处。相反,我会使用 good old和ToString,就像这样:CharactersPadLeft
toFixedWidth[n_Integer, width_Integer] :=
StringJoin[PadLeft[Characters[ToString[n]], width, "0"]]
然后你可以使用StringFormandToString来创建你的文件名:
toNumberedFileName[n_Integer] :=
ToString@StringForm["filename_``", toFixedWidth[n, 5]]
Mathematica 不太适合这种字符串处理。
编辑添加: Mathematica 本身没有所需的功能,但java.lang.String该类具有format()采用printf-style 参数的静态方法。您可以很容易地使用 Mathematica 的 JLink 功能调用它。性能不会很好,但对于许多用例,您不会太在意:
Needs["JLink`"];
LoadJavaClass["java.lang.String"];
LoadJavaClass["java.util.Locale"];
sprintf[fmt_, args___] :=
String`format[Locale`ENGLISH,fmt,
MakeJavaObject /@
Replace[{args},
{x_?NumericQ :> N@x,
x : (_Real | _Integer | True |
False | _String | _?JavaObjectQ) :> x,
x_ :> MakeJavaExpr[x]},
{1}]]
您需要做更多的工作,因为 JLink 对于具有可变数量参数的 Java 函数有点笨拙。该format()方法接受一个格式字符串和一个 Java 数组Object,而 Mathematica 不会自动进行转换,这就是它的MakeJavaObject用途。