我不會爲此使用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