gpt4 book ai didi

formatting - 如何在 Smalltalk/Pharo 中打印固定字符数的数字

转载 作者:行者123 更新时间:2023-12-04 01:34:38 27 4
gpt4 key购买 nike

实际任务:我想以人类可读的格式打印(我自己实现的)矩阵。作为先决条件,我认为我需要能够指定“将数字表示法适合 X 个字符”。我在 FloatInteger 类中找到了 #printShowingDecimalPlaces:#printPaddedWith:to: (第一种方法在更一般的 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 的 printf("%10g", 12.3e9) 这样的东西, (a) 将整个宽度限制为 10 个字符,并且 (b) 根据数字的大小选择最合适的格式。 Pharo 有这样的东西吗?

最佳答案

对于多种打印选项,我建议从加载 NumberPrinter 包 http://ss3.gemstone.com/ss/NumberPrinter/

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

-> '10.30'

虽然我没有在最近的 Pharo 版本中尝试过。

编辑:啊,但我没有看到处理 3 的倍数的指数的格式,也许你必须为这种格式创建一个子类。

编辑:或者我误解了:你不希望它打印为“12.3e9”而是“1.23e10”?请注意,除了有效位数 digitCount 之外,您还需要额外的大小,最坏情况下符号为 1 + 分数分隔符为 1 + 指数字母为 1 + 指数符号为 1 + 指数为 3( double float 的最坏情况)。

或多或少等同于 g 格式的是这样的:

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

->' -1.23e-204'

关于formatting - 如何在 Smalltalk/Pharo 中打印固定字符数的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36480249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com