我不会用PaddedForm
这个。事实上,我不确定这PaddedForm
对任何事情都有好处。相反,我会使用 good old和ToString
,就像这样:Characters
PadLeft
toFixedWidth[n_Integer, width_Integer] :=
StringJoin[PadLeft[Characters[ToString[n]], width, "0"]]
然后你可以使用StringForm
andToString
来创建你的文件名:
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
用途。