2016-04-07 20 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'" 

だから、私はそれは、(a)は、10文字までの全体の幅を制限し、(b)の数の大きさに応じた最適なフォーマットを選択し、Common Lispの(FORMAT T "~10g" 12.3d9)またはCのprintf("%10g", 12.3e9)ような何かをしたいと思います。ファロにこういうことがありますか?多彩な印刷オプションについて

答えて

3

、私は http://ss3.gemstone.com/ss/NumberPrinter/

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

からロードNumberPrinterパッケージを提案 - > '10 0.30'

私はしかし、最近のファロのバージョンでそれをしようとしませんでした。

EDIT: ああ、私は3の指数倍数を扱うためのフォーマットを参照していない、多分あなたは、このような形式のサブクラスを作成する必要があります。

EDIT: それとも間違えました:あなたはそれが'12 .3e9' ではなく '1.23e10' として印刷したくないですか?分数separatorの場合は+1、指数文字の場合は+1、指数記号の場合は+1、指数の場合は3(倍精度浮動小数点の最悪の場合)が必要です。

(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; print:x'は私が探していたものです。 – mobiuseng

関連する問題