我不会为此使用PaddedForm
。事实上,我不确定PaddedForm
对任何事情都有好处。相反,我会用好老ToString
,Characters
和PadLeft
,像这样:
toFixedWidth[n_Integer, width_Integer] :=
StringJoin[PadLeft[Characters[ToString[n]], width, "0"]]
然后你可以使用StringForm
和ToString
,使您的文件名:
toNumberedFileName[n_Integer] :=
[email protected]["filename_``", toFixedWidth[n, 5]]
数学是不是很适合到这种类型的线路。
编辑补充:适当的数学不具备所需的功能,但java.lang.String
类有静态方法format()
这需要printf
风格的参数。您可以轻松地使用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 :> [email protected],
x : (_Real | _Integer | True |
False | _String | _?JavaObjectQ) :> x,
x_ :> MakeJavaExpr[x]},
{1}]]
你需要做一些更多的工作,因为JLINK有点哑有关使用Java功能可变数量的参数。 format()
方法采用格式字符串和Java Object
的数组,Mathematica不会自动执行转换,这就是MakeJavaObject
的用途。
这是奇怪的 - 我从来没有意识到在Mathematica printf等价物。我以前使用过很多PaddedForm(以及各种精确控制)的东西。我也盯着PaddedForm文档,试图弄清楚这个额外的填充字符。 +1。我想知道。 – Cascabel 2009-10-06 16:34:26
我的理论是维基百科将Mathematica列为带有printf的语言,因为它具有StringForm。但是StringForm是printf的悲伤,苍白的阴影。 – Pillsy 2009-10-06 17:02:42
['IntegerString'](http://reference.wolfram.com/language/ref/IntegerString.html) – yohai 2014-10-21 20:54:52