- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
实际任务:我想以人类可读的格式打印(我自己实现的)矩阵。作为先决条件,我认为我需要能够指定“将数字表示法适合 X 个字符”。我在 Float
和 Integer
类中找到了 #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/
我是一名优秀的程序员,十分优秀!