0

为了“填充”我正在打印的数字,使其始终是固定数量的字符,我正在根据给定数字的整数数量制作填充字符串:

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

但是,打印的结果总是使变量pad变成一个字母,而不是像我分配它的值那样的空格。如果我pad displayNl在最后一行之前添加,它会出于某种原因打印出一个字母,而不仅仅是空格。

任何想法为什么会发生这种情况?

4

1 回答 1

2

我特别不知道 Gnu-Smalltalk。当然,有一些方便的 String 方法或格式化程序可以用于此目的。我的建议是首先将数字转换为字符串,然后使用空白填充对其进行格式化。这样你就可以避免你遇到的类型转换问题

新的 String 方法(最好是您的 ST Distribution 中现有的方法):

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'"
于 2018-02-28T12:37:03.210 回答