簡體   English   中英

Smalltalk奇怪的打印錯誤

[英]Smalltalk weird printing error

為了“填充”我要打印的數字,使其始終是固定數量的字符,我要根據給定數字中的整數和整數來創建填充字符串:

pad := '    '.
(freqVal < 10) ifTrue: [ pad := '   ' ].
((freqVal < 100) & (freqVal > 9)) ifTrue: [ pad := '  ' ].
((freqVal < 1000) & (freqVal > 99)) ifTrue: [ pad := ' ' ].
stdout<<pad<<freqVal<<<<nl

但是,打印結果總是使可變pad變成字母,而不是像我為其分配值的空格。 如果我在最后一行之前添加pad displayNl ,則出於某種原因,它會打印出一個字母,而不僅僅是空格。

任何想法為什么會發生這種情況?

我特別不了解Gnu-Smalltalk。 當然,確實有一些方便的String方法或格式化程序可用於此目的。 我的建議是先將數字轉換為字符串,然后使用空格填充將其格式化。 這樣,您將避免遇到的類型轉換問題

新的String方法(最好是ST發行版中的現有方法):

withLeading: aCharacter size: anInteger
   (anInteger < self size) ifTrue: [^self copyFrom: 1 to: anInteger].
   ^((self species new: anInteger - self size) atAllPut: aCharacter ), self

使用范例

9 asString withLeading: ($ ) size: 10           "result '         9'"
10 asString withLeading: ($ ) size: 10          "result '        10'"
999 asString withLeading: ($ ) size: 10         "result '       999'"

暫無
暫無

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

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