簡體   English   中英

如何在Smalltalk / Pharo中打印具有固定字符數的數字

[英]How to print a number with number of fixed characters in Smalltalk/Pharo

實際任務:我想以人類可讀的格式打印矩陣(我自己的實現)。 作為先決條件,我想我需要能夠指定“將數字表示擬合為X個字符”。 我發現#printShowingDecimalPlaces:#printPaddedWith:to:FloatInteger類中(第一種方法是更一般的Number類)。 單獨地,它們起作用,但前者僅在小數部分起作用而后者在小數部分起作用,例如:

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's printf("%10g", 12.3e9)這樣的東西,(a)將整個寬度限制為10個字符,(b)選擇最多合適的格式取決於數字的大小。 Pharo有這樣的東西嗎?

對於多種打印選項,我建議從http://ss3.gemstone.com/ss/NumberPrinter/加載NumberPrinter包。

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

- > '10 .30'

我沒有在最近的Pharo版本中嘗試過它。

編輯:啊,但我看到沒有處理指數多個3的格式,也許你必須為這種格式創建一個子類。

編輯:或者我誤解了:你不希望它打印為'12 .3e9'而是'1.23e10'? 請注意,除了有效數字digitCount之外,您需要額外的大小,最壞的情況是1表示符號+ 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM