2016-04-07 56 views
3

實際任務:我想以人工可讀格式打印矩陣(我自己的實現)。作爲一個先決條件,我想我需要能夠指定「將數字表示符合X個字符」。我發現#printShowingDecimalPlaces:#printPaddedWith:to:FloatInteger類(第一種方法在更一般的Number類)。獨立,他們的工作,但只有小數部分前人的工作和後期的部分之前的分數,如:如何在Smalltalk/Pharo中打印具有固定字符數的數字

10.3 printPaddedWith: Character space to: 5. 
"' 10.3'" 
-10.3 printPaddedWith: Character space to: 5. 
"' -10.3'" 
10.3 printShowingDecimalPlaces: 3. 
"'10.300'" 

而且,他們在科學的形式非常大(或同樣小的數字)動作不理想:

12.3e9 printShowingDecimalPlaces: 3. 
"'12300000000.000'" 
12.3e9 printPaddedWith: Character space to: 5. 
"' 1.23e10'" 

所以,我想是這樣的Common Lisp的(FORMAT T "~10g" 12.3d9)或C的printf("%10g", 12.3e9),使得(a)的整個寬度限制爲10個字符和(b),這取決於數的大小選擇最合適的格式。 Pharo中有這樣的東西嗎?

回答

3

對於通用的打印選項,我建議從 http://ss3.gemstone.com/ss/NumberPrinter/

(FloatPrinter fixed) digitCount: 2; print: 10.3. 

裝載NumberPrinter包 - > '10 0.30'

我沒有嘗試,在最近的Pharo版本雖然。

編輯: 啊,但我看到處理的3指數多無格式,也許你會創建這樣格式的子類。

編輯: 或者我錯過了:你不希望它打印爲'12.3e9'而是'1.23e10'?注意除了有效數digitCount之外,對於最壞情況,您需要額外的大小1對於分數分隔符+ 1對於指數字母+ 1對於指數符號+ 3對於指數(對於雙精度浮點最差情況)。

越多或等同於G□格式不太會是這樣的:

(FloatPrinter freeFormat) 
    totalWidth: 13; "size of the generated string" 
    digitCount: 6; "number of significant figures" 
    print: -12.3e-205. 

->' -1.23e-204' 
+0

謝謝!到目前爲止它的工作。 '(FloatPrinter freeFormat)totalWidth:n;打印:x'就是我正在尋找的東西。 – mobiuseng

相關問題